ホームページ > バックエンド開発 > PHPチュートリアル > PDO プリペアド ステートメントが MySQL に INSERT しないのはなぜですか?

PDO プリペアド ステートメントが MySQL に INSERT しないのはなぜですか?

Susan Sarandon
リリース: 2024-11-25 00:48:11
オリジナル
256 人が閲覧しました

Why Doesn't My PDO Prepared Statement INSERT INTO MySQL?

PDO プリペアド ステートメントを使用した MySQL INSERT INTO クエリ

PHP 開発の領域では、PDO を使用して MySQL クエリを実行すると、多くの利点が得られます。ただし、初心者が INSERT INTO 操作にプリペアド ステートメントを利用しようとすると、障害に遭遇することがよくあります。

次の謎のコード スニペットを考えてみましょう:

$statement = $link->prepare("INSERT INTO testtable(name, lastname, age)
VALUES('Bob','Desaunois','18')");
$statement->execute();
ログイン後にコピー

コーダーの熱心な努力にもかかわらず、データベースは残ります。悲しいほど空っぽ。コード内にはどのようなとらえどころのないエラーが潜んでいるのでしょうか?

成功への隠された鍵

この謎を解明する鍵は、パラメーター バインディングの力を理解することにあります。 PDO プリペアド ステートメントを使用すると、開発者は連結に頼ることなく、SQL クエリ内のプレースホルダーに値を安全にバインドできます。これを実現するには、次の手順に注意深く従う必要があります。

  1. SQL ステートメントでパラメータ プレースホルダ (:foo または ?) を使用します。
  2. パラメータを含む連想配列またはインデックス付き配列を構築します。
  3. execute() 関数を使用して配列を引数として渡し、値をバインドします。

バインド パラメータを含むサンプル コード

$statement = $link->prepare('INSERT INTO testtable (name, lastname, age)
    VALUES (:fname, :sname, :age)');

$statement->execute([
    'fname' => 'Bob',
    'sname' => 'Desaunois',
    'age' => '18',
]);
ログイン後にコピー

インデックス パラメータを含むサンプル コード

$statement = $link->prepare('INSERT INTO testtable (name, lastname, age)
    VALUES (?, ?, ?)');

$statement->execute(['Bob', 'Desaunois', '18']);
ログイン後にコピー

利点とPreferences

どちらのパラメーター バインド方法にも、それぞれ独自の長所と短所があります。パラメータ名によるバインドにより可読性が向上し、インデックスによるバインドによりコードを削減できます。最終的には開発者の好みによって選択が決まります。

これらの原則を採用すると、開発者は PDO プリペアド ステートメントを使用して INSERT INTO 操作を簡単に実行できるようになり、データがデータベース内の適切な場所に確実に配置されるようになります。

以上がPDO プリペアド ステートメントが MySQL に INSERT しないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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