add_persist 関数を実行しようとすると、開発者はエラー「SQLSTATE[HY093]: 無効なパラメーター番号」が発生することがあります。このエラーは、SQL クエリ内のパラメーター バインディングが正しくないことが原因で発生します。
提供されたコードでは、$sql ステートメントは、INSERT および ON DUPLICATE KEY UPDATE コマンドを実行して永続テーブル内の行を更新しようとします。ただし、$stm->execute 呼び出し内のパラメーター バインディングには矛盾があります。具体的には、:hash パラメータは 2 回表示されますが、PDO ドキュメントによると、各一意のパラメータ マーカーは値に 1 回だけバインドする必要があります。
この問題を解決するには、$sql クエリを変更して個別のパラメータを含める必要があります。次のように、渡される各値のパラメータ マーカー:
$sql = "INSERT INTO persist (user_id, hash, expire) VALUES (:user_id, :hash, :expire) ON DUPLICATE KEY UPDATE hash=:hash2";
さらに、$stm->execute 呼び出しには、両方のバインディングが含まれている必要があります。 :hash および :hash2 パラメータ:
$stm->execute( array(":user_id" => $user_id, ":hash" => $hash, ":expire" => $future, ":hash2" => $hash) );
このパラメータ バインディングの問題に対処することで、add_persist 関数は「無効なパラメータ番号」エラーを引き起こすことなく SQL クエリを正しく実行します。
以上がPHP PDO コードで「SQLSTATE[HY093]: 無効なパラメータ番号」エラーが発生するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。