调试 PHP PDOException 可能具有挑战性,尤其是当遇到“SQLSTATE[HY093]:无效的参数号”错误。此错误通常表明在预准备语句中命名参数的使用不正确。
考虑以下 PHP 代码:
function add_persist($db, $user_id) { $hash = md5("per11".$user_id."sist11".time()); $future = time()+(60*60*24*14); $sql = "INSERT INTO persist (user_id, hash, expire) VALUES (:user_id, :hash, :expire) ON DUPLICATE KEY UPDATE hash=:hash"; $stm = $db->prepare($sql); $stm->execute(array(":user_id" => $user_id, ":hash" => $hash, ":expire" => $future)); return $hash; }
执行此函数时,出现错误“SQLSTATE[HY093]: Invalid”参数号”可能会出现。根本原因在于调用execute()方法的行。具体来说,ON DUPLICATE KEY UPDATE hash=:hash 子句对插入和更新操作使用相同的参数名称“:hash”。
要解决此问题,您需要提供唯一的参数名称更新子句中的哈希值。下面是更正后的代码:
$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) );
通过为更新子句中的哈希值提供唯一的参数名称“:hash2”,您可以解决“SQLSTATE[HY093]:无效的参数号”错误。这确保了 PDO 驱动程序可以正确地将参数映射到准备好的 SQL 语句。
以上是为什么我的 PHP PDO 准备语句抛出'SQLSTATE[HY093]:无效的参数号”?的详细内容。更多信息请关注PHP中文网其他相关文章!