ホームページ >データベース >mysql チュートリアル >PHP PDO プリペアド ステートメントが「無効なパラメーター番号」をスローするのはなぜですか?
PDO 例外: PHP のパラメータ番号が無効です
PHP を使用しようとすると、エラー「SQLSTATE[HY093]: パラメータ番号が無効です」が発生しますPDO?根本的な原因は、プリペアド ステートメントでのパラメーターの使用に関連している可能性があります。
問題の説明:
提供されたコード スニペットには、
$sql = "INSERT INTO persist (user_id, hash, expire) VALUES (:user_id, :hash, :expire) ON DUPLICATE KEY UPDATE hash=:hash";
があります。 UPDATE 句に「:hash2」パラメータ マーカーがありません。 PDO では、ステートメント内でバインドされる各値に一意のパラメーター マーカーが必要であるため、この矛盾により PDO 例外が発生します。
解決策:
プリペアド ステートメントの SQL クエリを次のように調整します。以下:
$sql = "INSERT INTO persist (user_id, hash, expire) VALUES (:user_id, :hash, :expire) ON DUPLICATE KEY UPDATE hash=:hash2";
これに応じて、execute() ステートメントを変更して、 ":hash2" パラメータ マーカー:
$stm->execute( array( ":user_id" => $user_id, ":hash" => $hash, ":expire" => $future, ":hash2" => $hash ) );
Background:
PDO の prepare() メソッドでは、execute() の呼び出し時に値をバインドするための一意のパラメータ マーカーが必要です。繰り返しパラメーター マーカーを使用することは許可されておらず、複数の値を同じパラメーターに割り当てることは、「IN()」句などの句ではサポートされていません。
以上がPHP PDO プリペアド ステートメントが「無効なパラメーター番号」をスローするのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。