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