PDO でプリペアド ステートメントを使用した MySQL INSERT クエリの実行
PHP データ オブジェクト (PDO) の領域では、次の操作を試みると問題が発生する可能性があります。準備されたステートメントを通じて SQL クエリを実行します。一般的な問題には、INSERT INTO ステートメントを使用してデータベースにレコードを追加することが含まれます。
次のコードを考えてみましょう。
$dbhost = "localhost"; $dbname = "pdo"; $dbusername = "root"; $dbpassword = "845625"; $link = new PDO("mysql:host=$dbhost;dbname=$dbname","$dbusername","$dbpassword"); $statement = $link->prepare("INSERT INTO testtable(name, lastname, age) VALUES('Bob','Desaunois','18')"); $statement->execute();
このコードは、新しいレコードを testtable テーブルに挿入しようとします。 MySQLデータベース。ただし、データベースは空のままです。
この問題を解決するには、SQL ステートメントに値を直接埋め込むのではなく、パラメーター化されたクエリを使用する必要があります。パラメータ化されたクエリでは、プレースホルダ (?) または名前付きパラメータ (:parameter) を使用して値を表し、実行中に実際の値にバインドされます。このアプローチにより、SQL インジェクション攻撃が防止され、データ検証が保証されます。
INSERT INTO で準備済みステートメントを使用する正しい方法は次のとおりです。
$dbhost = 'localhost'; $dbname = 'pdo'; $dbusername = 'root'; $dbpassword = '845625'; $link = new PDO("mysql:host=$dbhost;dbname=$dbname", $dbusername, $dbpassword); $link->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $statement = $link->prepare('INSERT INTO testtable (name, lastname, age) VALUES (:fname, :sname, :age)'); $statement->execute([ 'fname' => 'Bob', 'sname' => 'Desaunois', 'age' => '18', ]);
パラメータ化されたクエリを使用することで、アプリケーションを攻撃から保護します。悪意のある入力を防止し、データの整合性を確保します。
以上がPDO for MySQL INSERT クエリでプリペアド ステートメントを適切に使用する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。