ホームページ  >  記事  >  バックエンド開発  >  PDO for MySQL INSERT クエリでプリペアド ステートメントを適切に使用する方法

PDO for MySQL INSERT クエリでプリペアド ステートメントを適切に使用する方法

Patricia Arquette
Patricia Arquetteオリジナル
2024-11-24 22:43:15835ブラウズ

How to Properly Use Prepared Statements with PDO for MySQL INSERT Queries?

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

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