致命错误:未被捕获的PDOException:SQLSTATE [HY093]:无效的参数编号:

时间:2019-07-31 16:30:09

标签: php postgresql

我正在尝试通过php对PostgreSQL数据库运行更新查询。当我尝试这样做时,我得到一个错误。

我尝试将id = ?更改为id = :id,但是没有用

我的update函数:

//update a student
    public function updateStudent(){
      $query = 'UPDATE ' . $this->table . ' ( name, course) VALUES ( :name, :course) WHERE id = ? ;';
      $stmt = $this->conn->prepare($query);

      $this->id = htmlspecialchars(strip_tags($this->id));
      $this->name = htmlspecialchars(strip_tags($this->name));
      $this->course = htmlspecialchars(strip_tags($this->course));
      $stmt->bindParam(':id', $this->id);
      $stmt->bindParam(':name', $this->name);
      $stmt->bindParam(':course', $this->course);

      if($stmt->execute()){
        return true;
      }
      //print error
      printf("Error: %s.\n", $stmt->error);
      return false;
    }

错误: Fatal error: Uncaught PDOException: SQLSTATE[HY093]: Invalid parameter number: mixed named and positional parameters in...

它说错误在第58行,该行显示为: $stmt = $this->conn->prepare($query); 我的错误是在58以上的行内。

更新: 如果我使用id = :id而不是id = ?,则会出现以下错误:

Fatal error: Uncaught PDOException: SQLSTATE[42601]: Syntax error: 7 ERROR: syntax error at or near "(" LINE 1: UPDATE students ( name, course) VALUES ( $1, $2) WHERE id = ... ^ in

1 个答案:

答案 0 :(得分:0)

您不能使用:param和?用:id代替?

但要进行更新,您可以使用

    'UPDATE ' . $this->table . ' 
        set  name = :name, 
         course = :course 
      WHERE id = :id ;';




   public function updateStudent(){
      $query = 'UPDATE ' . $this->table . ' 
                  set  name = :name, 
                       course = :course 
                WHERE id = :id ;';
      $stmt = $this->conn->prepare($query);

      $this->id = htmlspecialchars(strip_tags($this->id));
      $this->name = htmlspecialchars(strip_tags($this->name));
      $this->course = htmlspecialchars(strip_tags($this->course));
      $stmt->bindParam(':id', $this->id);
      $stmt->bindParam(':name', $this->name);
      $stmt->bindParam(':course', $this->course);

      if($stmt->execute()){
        return true;
      }
      //print error
      printf("Error: %s.\n", $stmt->error);
      return false;
    }