”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > 为什么我的 PHP PDO 准备语句抛出“无效参数号”错误?

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

发布于2025-01-18
浏览:614

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]

但是,准备好的语句包含重复的 hash 参数标记,这是 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确保prepared语句中没有重复的参数标记,解决了错误。

最新教程 更多>

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3