問題:
PHP で、ステートメント内で変数を使用するVALUES で囲まれた MySQL ステートメントが原因で
質問:
VALUES 内に変数を含めるとエラーが発生するのはなぜですか?
回答:
MySQL ステートメントに PHP 変数を含めるには 2 つの異なるアプローチがあります適切に:
プリペアド ステートメントを使用:
SQL データ リテラル (文字列、数値) を表す変数の場合は、プリペアド ステートメントを使用する必要があります。これには以下が含まれます:
例(mysqli):
$type = 'testing'; $sql = "INSERT INTO contents (type, reporter, description) VALUES ('whatever', ?, ?)"; $mysqli->execute_query($sql, [$type, $reporter, $description]);
ホワイトリスト フィルタリングを使用:
クエリ部分を表すその他の変数 (キーワードなど) 、識別子)、ホワイト リストでフィルタリングし、許可された値のみが使用されるようにする必要があります。 例 (orderby の確認):
$orderby = $_GET['orderby'] ?: 'name'; $allowed = ['name', 'price', 'qty']; $key = array_search($orderby, $allowed); if ($key === false) throw new InvalidArgumentException("Invalid field name");
結論:
これらの原則に従うことで、SQL インジェクションやPHP 変数が関係する場合にクエリが正しく実行されるようにします。データ リテラルにはプリペアド ステートメントを使用する必要がありますが、ホワイトリストによりクエリの他の部分には許可された値のみが挿入されるようになります。
以上がPHP 変数を MySQL の VALUES 句で使用するとエラーが発生するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。