ホームページ >バックエンド開発 >PHPチュートリアル >MySQL ステートメントに PHP 変数を安全に含めるにはどうすればよいですか?

MySQL ステートメントに PHP 変数を安全に含めるにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-12-25 08:10:29332ブラウズ

How Can I Safely Include PHP Variables in MySQL Statements?

MySQL ステートメントに PHP 変数を含める

VALUES ステートメント内で PHP 変数を使用してテーブルに値を挿入するときに問題が発生する。 PHP 変数を MySQL ステートメントに統合するための適切なアプローチを理解することが重要です。

プリペアド ステートメントを利用する

MySQL ステートメントにデータ リテラル (SQL 文字列または数値) を挿入するには、準備されたステートメントの使用。

  1. SQL ステートメント内の変数をプレースホルダーに置き換える
  2. 修正されたクエリを準備する
  3. 変数をプレースホルダーにバインドする
  4. クエリを実行するquery

Mysqli を使用したデータ リテラルの追加

PHP 8.2 では、これらの手順を 1 つの呼び出しに組み合わせることができます:

$type = 'testing';
$reporter = "John O'Hara";
$sql = "INSERT INTO contents (type,reporter,description) VALUES ('whatever',?,?)";
$mysqli->execute_query($sql, [$reporter, $description]);

古い PHP の場合バージョン:

$type = 'testing';
$reporter = "John O'Hara";
$sql = "INSERT INTO contents (type,reporter,description) VALUES ('whatever',?,?)";
$stmt = $mysqli->prepare($sql);
$stmt->bind_param("ss", $reporter, $description);
$stmt->execute();

PDO を使用したデータ リテラルの追加

PDO は合理化されたアプローチを提供します:

$type = 'testing';
$reporter = "John O'Hara";
$sql = "INSERT INTO contents (type,reporter,description) VALUES ('whatever',?,?)";
$stmt = $pdo->prepare($sql);
$stmt->execute([$reporter, $description]);

フィルター他のクエリの変数Parts

リテラル (キーワード、識別子) 以外のクエリ部分を表す変数は、ホワイトリストを通じてフィルター処理する必要があります。これにより、意図しない値の挿入が防止されます。

たとえば、ユーザー入力に基づいてフィールド名をフィルターするには:

$orderby = $_GET['orderby'] ?: "name"; // set the default value
$allowed = ["name", "price", "qty"]; // the white list of allowed field names
$key = array_search($orderby, $allowed, true); // see if we have such a name
if ($key === false) { 
    throw new InvalidArgumentException("Invalid field name"); 
}

以上がMySQL ステートメントに PHP 変数を安全に含めるにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。