首页 >数据库 >mysql教程 >为什么在 PDO INSERT...ON DUPLICATE KEY UPDATE 查询中两次使用相同的命名参数会导致'参数号无效”错误?

为什么在 PDO INSERT...ON DUPLICATE KEY UPDATE 查询中两次使用相同的命名参数会导致'参数号无效”错误?

Susan Sarandon
Susan Sarandon原创
2024-12-10 14:57:09665浏览

Why Does Using the Same Named Parameter Twice in a PDO INSERT...ON DUPLICATE KEY UPDATE Query Cause a

PHP PDOException:参数编号无效

问题:

使用以下命令构造 INSERT 查询时ON DUPLICATE KEY UPDATE 子句,在execute() 方法可能会导致“SQLSTATE[HY093]:无效参数编号”错误。

解决方案:

要解决此问题,请为以下对象分配不同的参数标记execute() 方法中的每个值。以下是更新后的代码:

$sql = "INSERT INTO persist (user_id, hash, expire)
        VALUES (:user_id, :hash, :expire)
        ON DUPLICATE KEY UPDATE hash=:hash2";
$stm->execute(
    array(":user_id" => $user_id,
          ":hash" => $hash,
          ":expire" => $future,
          ":hash2" => $hash)
);

说明:

PDO 文档指出“您不能在准备好的语句中两次使用同名的命名参数标记” ”。这是因为传递给查询的每个值都必须具有唯一的参数标记。通过为更新后的哈希值(:hash2)分配不同的参数标记,问题得到解决。

以上是为什么在 PDO INSERT...ON DUPLICATE KEY UPDATE 查询中两次使用相同的命名参数会导致'参数号无效”错误?的详细内容。更多信息请关注PHP中文网其他相关文章!

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