开发者社区> 问答> 正文

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

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

function add_persist($db, $user_id) { $hash = md5("per11".$user_id."sist11".time()); $future = time()+(606024*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; } 我觉得这很简单,我只是没有抓住。有任何想法吗?

展开
收起
保持可爱mmm 2020-05-11 16:51:59 714 0
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()子句中将多个值绑定到单个命名参数。来源:stack overflow

    2020-05-11 16:52:28
    赞同 展开评论 打赏
问答分类:
问答标签:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
PHP安全开发:从白帽角度做安全 立即下载
PHP 2017.北京 全球开发者大会——高可用的PHP 立即下载
复杂PHP系统性能瓶颈排查及优化 立即下载