INSERT INTO によるプリペアド ステートメントの組み込み
PHP: データ オブジェクトの迷宮の深さをたどると、MySQL を実行しようとすると複雑な難題が発生します。準備されたステートメントを使用したクエリ、特に INSERT INTO 操作。次のコード スニペットを考えてみましょう:
$statement = $link->prepare("INSERT INTO testtable(name, lastname, age) VALUES('Bob','Desaunois','18')"); $statement->execute();
所定の方法を遵守しているにもかかわらず、データベースは依然として荒廃したままです。私たちの進歩を妨げていた欠けている要素を調べてみましょう。
INSERT INTO クエリのプリペアド ステートメントの可能性を解き放つ鍵は、パラメータ バインディングにあります。これは、値を安全かつ動的に統合できるようにするテクニックです。 SQL ステートメント。これは、プレースホルダーをクエリに組み込み、その後、実行時に対応する値を連想配列として提供することによって実現されます。
修正されたコードを確認してください:
$statement = $link->prepare('INSERT INTO testtable (name, lastname, age) VALUES (:fname, :sname, :age)'); $statement->execute([ 'fname' => 'Bob', 'sname' => 'Desaunois', 'age' => '18', ]);
クエリ内にパラメータ名「:fname」、「:sname」、および「:age」が存在することに注意してください。これらは実際の値のプレースホルダーとして機能し、その後、execute() 関数で連想配列として提供されます。
または、'?' を利用することもできます。構文をプレースホルダーとして使用し、パラメータ名を指定せずに値の配列を渡します:
$statement = $link->prepare('INSERT INTO testtable (name, lastname, age) VALUES (?, ?, ?)'); $statement->execute(['Bob', 'Desaunois', '18']);
どちらのアプローチにも、それぞれ長所と短所があります。名前付きパラメータを使用すると可読性が向上しますが、「?」構文により、値をバインドするプロセスが簡素化されます。ただし、最終的には、この 2 つのどちらを選択するかは個人の好みの問題です。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3