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