首页 >数据库 >mysql教程 >为什么 PDO 会抛出'SQLSTATE[HY093]:无效的参数号”以及如何修复它?

为什么 PDO 会抛出'SQLSTATE[HY093]:无效的参数号”以及如何修复它?

Barbara Streisand
Barbara Streisand原创
2024-12-11 10:17:10438浏览

Why Does PDO Throw

SQLSTATE[HY093]: Invalid Parameter Number with PDO

尝试执行函数时,出现错误消息,指示“SQLSTATE[HY093] : 可能会出现“参数编号无效”。出现此问题的原因是对 PDO 命名参数行为的误解。

您提供的函数包含以下代码:

$sql = "INSERT INTO persist (user_id, hash, expire) VALUES (:user_id, :hash, :expire) ON DUPLICATE KEY UPDATE hash=:hash";

为 SQL 语句定义命名参数时,它是确保每个唯一参数标记仅使用一次至关重要。但是,在这种情况下,“:hash”使用了两次,从而导致错误。

要解决此问题,您需要为调用 PDOStatement 时传递给语句的每个值分配唯一的参数标记::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)
);

生成的 SQL 查询将成功插入或更新“persist”表,而不会遇到无效的参数号错误。

以上是为什么 PDO 会抛出'SQLSTATE[HY093]:无效的参数号”以及如何修复它?的详细内容。更多信息请关注PHP中文网其他相关文章!

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