一尘不染

PHP PDOException:“ SQLSTATE [HY093]:无效的参数编号”

mysql

尝试运行以下功能时,出现错误“ SQLSTATE [HY093]:无效的参数号”:

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;
}

我觉得这很简单,我只是没有抓住。有任何想法吗?


阅读 222

收藏
2020-05-17

共1个答案

一尘不染

尝试:

$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));

文档摘录(http://php.net/manual/zh/pdo.prepare.php):

调用PDOStatement ::
execute()时,对于要传递给语句的每个值,必须包含一个唯一的参数标记。您不能在准备好的语句中两次使用相同名称的命名参数标记。您不能在例如SQL语句的IN()子句中将多个值绑定到单个命名参数。

2020-05-17