ホームページ >バックエンド開発 >PHPチュートリアル >PDO プリペアド ステートメントが MySQL への INSERT に失敗するのはなぜですか?
PDO での INSERT INTO によるプリペアド ステートメントのエラー
PDO の複雑さをナビゲートする際、MySQL クエリのプリペアド ステートメントの使用で問題が発生する場合があります。次のコードを考えてみましょう。
$dbhost = "localhost"; $dbname = "pdo"; $dbusername = "root"; $dbpassword = "845625"; $link = new PDO("mysql:host=$dbhost;dbname=$dbname","$dbusername","$dbpassword"); $statement = $link->prepare("INSERT INTO testtable(name, lastname, age) VALUES('Bob','Desaunois','18')"); $statement->execute();
このアプローチに従っても、データベースは空のままです。
解決策は、プリペアド ステートメントを適切に使用することにあります。代わりに、以下を利用してください:
$link->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $statement = $link->prepare('INSERT INTO testtable (name, lastname, age) VALUES (:fname, :sname, :age)'); $statement->execute([ 'fname' => 'Bob', 'sname' => 'Desaunois', 'age' => '18', ]);
準備されたステートメントは入力のサニタイズを提供します。 SQL ステートメントで「:parameter」プレースホルダーを使用し、これらのパラメーターの連想配列を「execute」関数で渡します。あるいは、「?」を使用します。
どちらの方法にも長所と短所があります。パラメーター名をバインドすると読みやすくなり、後者の方法ではコードが簡素化されます。
以上がPDO プリペアド ステートメントが MySQL への INSERT に失敗するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。