php - 查询未执行 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();
解决方案
- 不要连接变量的值,而是放置占位符。
- 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();
推荐阅读
- wordpress - Twig + wordpress - 如何获取 style.css 的文件时间
- swift - 有没有办法在 SKSpriteNode 中分配和调用变量?
- docker - 使用 Docker 构建返回 HashSum 错误
- swift - Swift:如何将 AnyObject.Type 作为参数?
- php - 相同的角色对不同的用户有不同的操作
- python - 提取二维数组中最小点的索引
- swift - Swift4:当你有一个导航控制器时如何设置顶部约束?
- node.js - 需要代码在网页上显示 mysql 数据库,其中使用 angular.js 和 node.js 进行分页
- smartcard - 如何检查 ISD/CM 下的哪些密钥是“安全通道基础密钥”?
- javascript - 按 id 匹配 2 个数组(用户 [用户 id 作为键] 到订单 [订单 id 数组的值])