PDO 更新错误无效参数号:绑定变量的数量与令牌的数量不匹配
Posted
技术标签:
【中文标题】PDO 更新错误无效参数号:绑定变量的数量与令牌的数量不匹配【英文标题】:PDO update error nvalid parameter number: number of bound variables does not match number of token 【发布时间】:2022-01-22 17:47:47 【问题描述】:我正在编写一个简单的程序,但卡在更新查询上。错误显示“Uncaught PDOException: SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of token”。下面是代码
class PDContr extends PDedit
private $userFirstName;
private $userLastName;
public function __construct($userFirstName, $userLastName)
$this->userFirstName = $userFirstName;
$this->userLastName = $userLastName;
public function pdedit()
if($this->emptyInput() == false)
header("location: ../personaldetail.php?error=emptyinput");
exit();
if($this->invaliduid() == false)
header("location: ../personaldetail.php?error=userFirstname");
exit();
$this->setUser($this->userFirstName, $this->userLastName);
下面是类扩展到我的数据库。难道是我没有定义user_ID,所以无法执行更新查询?
class PDedit extends Dbh
protected function setUser($userFirstName, $userLastName)
$stmt = $this->connect()->prepare('UPDATE user SET user_FirstName = ?, user_LastName = ? WHERE user_ID = ?);');
if(!$stmt->execute(array($userFirstName, $userLastName)))
$stmt = null;
header("location: ../personaldetail.php?error=stmtfailed");
exit();
$stmt = null;
【问题讨论】:
user
是数据库吗?如果不是,为什么要像这样扩展数据库类?
是的。用户就是数据库。
当您尝试调用setUser
方法时是否知道用户ID?类最初是如何被调用的
我有另一个文件来调用 setUser(用户名和用户列表名),但不包括用户 ID。问题是我不知道在哪里可以定义用户 ID。
没有上下文或明确指示这是如何工作的 - 您应该知道在哪里/如何找到user ID
。用户是在更新他们自己的个人资料,还是您(或管理员)在更新个人资料?您是单击超链接开始edit
进程还是单击按钮...我们不知道
【参考方案1】:
你忘了加user_ID
:
protected function setUser($userFirstName, $userLastName, $userId = null) // Add param here
$stmt = $this->connect()->prepare('UPDATE user SET user_FirstName = ?, user_LastName = ? WHERE user_ID = ?);');
if(!$stmt->execute(array($userFirstName, $userLastName, $userId)))
$stmt = null;
header("location: ../personaldetail.php?error=stmtfailed");
exit();
$stmt = null;
希望能帮到你。
【讨论】:
不幸的是。它显示错误消息。未捕获的 PDOException:SQLSTATE[42000]:语法错误或访问冲突:1064 您的 SQL 语法有错误;查看与您的 MariaDB 服务器版本相对应的手册,了解在 ')' 附近使用的正确语法以上是关于PDO 更新错误无效参数号:绑定变量的数量与令牌的数量不匹配的主要内容,如果未能解决你的问题,请参考以下文章
Pdo - 将值插入数据库错误 SQLSTATE [HY093] [重复]