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 は値を直接埋め込む代わりに、プレースホルダーを使用します:
:name
のようなプレースホルダーを使用し、連想配列の値を execute()
.?
をプレースホルダーとして使用し、数値インデックス付き配列の値を execute()
.名前付きパラメータを使用して修正されたコードは次のとおりです。
<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 サイトの他の関連記事を参照してください。