ホームページ >データベース >mysql チュートリアル >PDO プリペアド ステートメントが MySQL にデータを挿入できないのはなぜですか?

PDO プリペアド ステートメントが MySQL にデータを挿入できないのはなぜですか?

Barbara Streisand
Barbara Streisandオリジナル
2025-01-13 06:14:42116ブラウズ

Why Are My PDO Prepared Statements Failing to Insert Data into 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 サイトの他の関連記事を参照してください。

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