首页 > 解决方案 > 查询未执行 Uncaught PDOException: SQLSTATE[HY093]: Invalid parameter number: 绑定变量数与标记数不匹配

问题描述

我的 sql 查询出现以下错误。相同的查询在其他服务器上运行良好。错误:致命错误:未捕获的 PDOException:SQLSTATE[HY093]:无效的参数编号:绑定变量的数量与 C:\xampp\htdocs\sms\send_link.php:59 中的标记数量不匹配堆栈跟踪:#0 C:\ xampp\htdocs\sms\send_link.php(59): PDOStatement->execute() #1 {main} 在第 59 行的 C:\xampp\htdocs\sms\send_link.php 中抛出(第 59 行是 $query->execute ();)

             $expFormat = mktime(date("H"), date("i"), date("s"), date("m"), date("d") + 1, date("Y"));
             $expDate = date("Y-m-d H:i:s", $expFormat);
             $key = md5(time());
             $addKey = substr(md5(uniqid(rand(), 1)), 3, 10);
             $key = $key . $addKey;
                $sql="INSERT INTO `password_reset_temp` (`email`, `key`, `expDate`) VALUES ('" . $email . "', '" . $key . "', '" . $expDate . "');";
                $query = $dbh->prepare($sql);
                $query->bindParam(':email',$email,PDO::PARAM_STR);
                $query->bindParam(':key',$key,PDO::PARAM_STR);
                $query->bindParam(':expDate',$expDate,PDO::PARAM_STR);
                $query->execute();

表结构点击这里

标签: phpsql

解决方案


  1. 不要连接变量的值,而是放置占位符。
  2. key是mysql中的一个关键字避免使用这个试试下面的代码。
$expFormat = mktime(date("H"), date("i"), date("s"), date("m"), date("d") + 1, date("Y"));
$expDate = date("Y-m-d H:i:s", $expFormat);
$key = md5(time());
$addKey = substr(md5(uniqid(rand(), 1)), 3, 10);
$key1 = $key . $addKey;
$sql="INSERT INTO password_reset_temp(email,key1,expDate) VALUES(:email,:key1,:expDate)";    
$query = $dbh->prepare($sql);
$query->bindParam(':email',$email,PDO::PARAM_STR);
$query->bindParam(':key1',$key1,PDO::PARAM_STR);
$query->bindParam(':expDate',$expDate,PDO::PARAM_STR);
$query->execute();

推荐阅读