ホームページ >データベース >mysql チュートリアル >PHP PDO プリペアド ステートメントが「無効なパラメーター番号」をスローするのはなぜですか?

PHP PDO プリペアド ステートメントが「無効なパラメーター番号」をスローするのはなぜですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-12-08 07:22:11333ブラウズ

Why Does My PHP PDO Prepared Statement Throw

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

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