ホームページ >データベース >mysql チュートリアル >PDO プリペアド ステートメントが MySQL にデータを挿入できないのはなぜですか?
MySQL での PDO プリペアド ステートメント挿入のトラブルシューティング
MySQL のプリペアド ステートメントで PHP の PDO を使用すると、セキュリティと効率が向上しますが、挿入の問題が発生する可能性があります。このガイドは、コードが一見正しいにもかかわらず挿入が失敗するという一般的な問題に対処します。
問題: INSERT
試行後の空のデータベース
準備されたステートメントを使用する INSERT
がデータベースにデータを入力しないシナリオを調べてみましょう。
<code class="language-php">$statement = $link->prepare("INSERT INTO testtable(name, lastname, age) VALUES('Bob','Desaunois','18')"); $statement->execute();</code>
このコードは機能しているように見えますが、testtable
は空のままです。
解決策: パラメーター バインディング
この解決策には、パラメーターを正しくバインドすることが含まれます。 PDO プリペアド ステートメントでは、SQL クエリ内にプレースホルダー (名前付きパラメータ (:param
) または疑問符 (?
) のいずれか) が必要です。 これらのプレースホルダーには、execute()
メソッド中に値が設定されます。
両方の方法を使用してコードを修正する方法は次のとおりです:
<code class="language-php">// Using Named Parameters $statement = $link->prepare('INSERT INTO testtable (name, lastname, age) VALUES (:fname, :sname, :age)'); $statement->execute(['fname' => 'Bob', 'sname' => 'Desaunois', 'age' => '18']); // Using Question Mark Placeholders $statement = $link->prepare('INSERT INTO testtable (name, lastname, age) VALUES (?, ?, ?)'); $statement->execute(['Bob', 'Desaunois', '18']);</code>
パラメーター バインディングを利用することで、データが安全に挿入され、SQL インジェクションのリスクが軽減され、データの整合性が維持されます。 値は実行中にクエリに正しく置換されます。
以上がPDO プリペアド ステートメントが MySQL にデータを挿入できないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。