ホームページ > データベース > mysql チュートリアル > PDO INSERT INTO Prepared Statement が機能しないのはなぜですか?

PDO INSERT INTO Prepared Statement が機能しないのはなぜですか?

Linda Hamilton
リリース: 2025-01-13 07:14:42
オリジナル
558 人が閲覧しました

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

MySQL INSERT INTO クエリでの PDO プリペアド ステートメントの使用

PHP Data Objects (PDO) は、安全な MySQL 対話用に準備されたステートメントを提供しますが、INSERT INTO クエリの構築は困難な場合があります。 一般的な問題とその解決策に取り組みましょう。

次のコードを考えてみましょう:

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

この一見正しいコードは、データベースへのデータの取り込みに失敗することがよくあります。 なぜ?

ミッシングリンク: パラメータバインディング

重要なのは パラメータ バインディングです。 これにより、SQL インジェクションの脆弱性が防止され、コードの保守性が向上します。 PDO は値を直接埋め込む代わりに、プレースホルダーを使用します:

  1. 名前付きパラメータ: SQL で :name のようなプレースホルダーを使用し、連想配列の値を execute().
  2. に提供します。
  3. 位置パラメータ: ? をプレースホルダーとして使用し、数値インデックス付き配列の値を execute().
  4. に指定します。

パラメータバインディングを含む修正されたコード

名前付きパラメータを使用して修正されたコードは次のとおりです。

<code class="language-php">$statement = $link->prepare("INSERT INTO testtable(name, lastname, age) VALUES (:name, :lastname, :age)");
$statement->execute([
    'name' => 'Bob',
    'lastname' => 'Desaunois',
    'age' => '18',
]);</code>
ログイン後にコピー

位置パラメータを使用した同等のコードは次のとおりです。

<code class="language-php">$statement = $link->prepare("INSERT INTO testtable(name, lastname, age) VALUES (?, ?, ?)");
$statement->execute(['Bob', 'Desaunois', '18']);</code>
ログイン後にコピー

パラメータバインディングの利点

パラメータ バインディングによりデータベースのセキュリティが強化され、コードがより効率的で読みやすくなります。 これは PDO を確実に使用するために不可欠です。 このテクニックをマスターすることは、安全で効果的な PHP データベース プログラミングにとって非常に重要です。

以上がPDO INSERT INTO Prepared Statement が機能しないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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