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] [重复]

PHP / PDO动态绑定值(无效的参数计数错误)

绑定变量的数量与令牌的数量不匹配

使用自定义 PDO 函数时,绑定变量的数量与标记的数量不匹配

教义 setParameter 和无效参数号