PHP PDO での無効なパラメーター番号エラー
PDO を使用して準備されたステートメントを実行しようとすると、エラー「SQLSTATE[HY093」が発生する場合があります。 ]: パラメータ番号が無効です。」この問題は、パラメータ マーカーの誤った使用が原因で発生します。
提供された関数 add_persist は、次の準備済みステートメントを使用します。
INSERT INTO persist (user_id, hash, expire) VALUES (:user_id, :hash, :expire) ON DUPLICATE KEY UPDATE hash=:hash
execute() メソッドを使用してパラメータ値をバインドする場合、関数次の値を使用します:
["user_id" => $user_id, "hash" => $hash, "expire" => $future]
ただし、準備されたステートメントには、PDO で許可されていないハッシュの重複パラメーター マーカーが含まれています。この問題を解決するには、渡される値ごとに一意のパラメータ マーカーを割り当てる必要があります。
修正されたコードは次のようになります。
$sql = "INSERT INTO persist (user_id, hash, expire) VALUES (:user_id, :hash, :expire) ON DUPLICATE KEY UPDATE hash=:hash2"; $stm = $db->prepare($sql); $stm->execute( array("user_id" => $user_id, "hash" => $hash, "expire" => $future, "hash2" => $hash) );
追加のパラメータ :hash2 により、パラメータが存在しないことが保証されます。準備されたステートメント内のパラメーター マーカーが重複し、エラーが解決されました。
以上がPHP PDO プリペアド ステートメントで「無効なパラメータ番号」エラーがスローされるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。