致命错误:未捕获的 PDOException:SQLSTATE[HY093]:

我正在尝试通过 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


慕田峪9158850
浏览 479回答 1
1回答

慕村225694

你不能使用 :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;    }
打开App,查看更多内容
随时随地看视频慕课网APP