ホームページ >バックエンド開発 >PHPチュートリアル >PDO プリペアド ステートメントが MySQL への INSERT に失敗するのはなぜですか?

PDO プリペアド ステートメントが MySQL への INSERT に失敗するのはなぜですか?

DDD
DDDオリジナル
2024-11-24 13:38:12666ブラウズ

Why are my PDO Prepared Statements Failing to INSERT into MySQL?

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 サイトの他の関連記事を参照してください。

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