首页  >  文章  >  后端开发  >  为什么我的 PHP PDO 准备语句抛出'无效参数号”错误?

为什么我的 PHP PDO 准备语句抛出'无效参数号”错误?

Susan Sarandon
Susan Sarandon原创
2024-11-25 09:25:18156浏览

Why Does My PHP PDO Prepared Statement Throw an

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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn