PHP 7で準備されたステートメントを使用する方法MySQLIまたはPDO拡張機能を使用して、PHP 7の作成されたステートメントは、パラメーター化された値でSQLクエリを実行する構造化された方法を提供します。このアプローチは、変数をSQL文字列に直接埋め込むことと比較して、セキュリティとパフォーマンスを大幅に向上させます。
MySQLIを使用してください:
最初に、データベース接続が必要です。 pdo:
mysqli_connect()
を使用して
。 重要なのは、クエリで使用する前に、常にサニタイズまたはハッシュユーザー入力をサニタイズするか、さらに優れています。 SQLインジェクションは、悪意のあるユーザーがSQLコードを入力フィールドに注入し、データベースを変更または侵害する可能性がある場合に発生します。 準備されたステートメントは、SQLコードをデータから分離することにより、これを防ぎます。 データベースは、パラメーターを実行可能なコードとしてではなくデータとして扱うため、クエリを操作しようとする悪意のある試みを中和します。 これは、データベースが準備中にクエリ
<?php
$conn = mysqli_connect("localhost", "your_username", "your_password", "your_database");
if (!$conn) {
die("Connection failed: " . mysqli_connect_error());
}
// Prepare the statement
$stmt = $conn->prepare("SELECT * FROM users WHERE username = ? AND password = ?");
// Bind parameters. 's' indicates string type. Adjust as needed for other data types (i, d, b).
$stmt->bind_param("ss", $username, $password);
// Assign values to parameters
$username = $_POST['username'];
$password = $_POST['password']; //Important: NEVER directly use user input without sanitization. Consider password hashing instead of storing plain text passwords!
// Execute the statement
$stmt->execute();
// Bind result variables
$stmt->bind_result($id, $username, $email, $password); //Replace with your actual column names
// Fetch results
while ($stmt->fetch()) {
echo "ID: " . $id . "<br>";
echo "Username: " . $username . "<br>";
echo "Email: " . $email . "<br>";
// Avoid echoing the password!
}
// Close the statement and connection
$stmt->close();
$conn->close();
?>
ログイン後にコピー
を1回
に解析し、提供されたパラメーターを使用してクエリのみを実行するためです。
-
クエリキャッシング:データベースサーバーは、作成されたステートメントの実行計画をキャッシュできます。 さまざまなパラメーターを使用した後続の実行は、この計画を再利用して、オーバーヘッドの解析を減らします。 これは、頻繁に実行されるクエリに特に有益です。
-
ネットワークトラフィックの削減:クエリは準備中に1回しか送信されないため、その後の実行はパラメーターのみを送信し、アプリケーションとデータベースサーバー間のネットワークトラフィックを削減します。クエリ処理の速度。 パラメーターの数とタイプがクエリと一致することを常に確認してください。
- エラー処理を無視してください。ステートメントの準備、結合、実行後、常にエラーを確認してください。 適切なエラー処理は、問題を迅速に特定して解決するのに役立ちます。
調製されていないステートメントの混合:
調製されたステートメントを一貫して使用すると、利益を無効にする可能性があります。 アプリケーション全体で準備されたステートメントを使用する際の一貫性を努めています。- データの消毒の無視(結合前):
準備されたステートメントがSQLインジェクションを防ぐ一方で、パラメーターにバインドする前にユーザー入力を消毒することが重要です。これは、データの整合性と他のタイプの攻撃を防ぐために重要です。 たとえば、バッファオーバーフローの問題を防ぐために、入力の長さを検証する必要がある場合があります。-
バインディングパラメーターがエラーまたは予期しない結果につながる可能性がある場合、誤ったデータ型の使用。 データベースで定義されているデータ型に細心の注意を払い、PHPコードで適切なバインディングタイプを使用してください。 たとえば、整数列に文字列バインディングを使用しないでください。
以上がPHP 7で準備されたステートメントを使用する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。