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

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

Barbara Streisand
リリース: 2024-12-25 08:10:29
オリジナル
263 人が閲覧しました

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート