ホームページ >データベース >mysql チュートリアル >PDO が「SQLSTATE[HY093]: Invalid Parameter Number」をスローするのはなぜですか?それを修正するにはどうすればよいですか?

PDO が「SQLSTATE[HY093]: Invalid Parameter Number」をスローするのはなぜですか?それを修正するにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-12-11 10:17:10440ブラウズ

Why Does PDO Throw

SQLSTATE[HY093]: PDO のパラメータ番号が無効です

関数を実行しようとすると、「SQLSTATE[HY093]」というエラー メッセージが表示されます。 :パラメータ番号が不正です」と表示される場合があります。この問題は、PDO での名前付きパラメータの動作の誤解が原因で発生します。

指定した関数には次のコードが含まれています:

$sql = "INSERT INTO persist (user_id, hash, expire) VALUES (:user_id, :hash, :expire) ON DUPLICATE KEY UPDATE hash=:hash";

SQL ステートメントの名前付きパラメータを定義する場合、これは、それぞれの一意のパラメータ マーカーが 1 回だけ使用されるようにするために重要です。ただし、この場合、「:hash」が 2 回使用されているため、エラーが発生します。

この問題を解決するには、PDOStatement を呼び出すときにステートメントに渡す値ごとに一意のパラメーター マーカーを割り当てる必要があります。 ::execute():

$sql = "INSERT INTO persist (user_id, hash, expire)
        VALUES (:user_id, :hash, :expire)
        ON DUPLICATE KEY UPDATE hash=:hash2";
$stm->execute(
    array(":user_id" => $user_id, 
          ":hash" => $hash, 
          ":expire" => $future,
          ":hash2" => $hash)
);

結果の SQL クエリは、無効なパラメータ番号に遭遇することなく、「persist」テーブルを正常に挿入または更新します。エラー。

以上がPDO が「SQLSTATE[HY093]: Invalid Parameter Number」をスローするのはなぜですか?それを修正するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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