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

Patricia Arquette
リリース: 2024-11-24 22:43:15
オリジナル
833 人が閲覧しました

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

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