【问题标题】:Fatal error: Uncaught PDOException: SQLSTATE[HY093]: Invalid parameter number: mixed named and positional parameters in致命错误:未捕获的 PDOException:SQLSTATE[HY093]:无效参数号:混合命名参数和位置参数
【发布时间】:2019-08-01 00:54:41
【问题描述】:

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

【问题讨论】:

  • 好吧,当你使用 :id 而没有混合命名参数和位置参数时,你会得到什么错误?请相应地更新您的问题。另外,这实际上是有效的 PostgreSQL UPDATE 语法吗?
  • ( :name, :course) WHERE id = ? 这行不通
  • 我更新了,你可以查看

标签: php postgresql


【解决方案1】:

你不能使用 :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;
    }

【讨论】:

  • 非常感谢,您是救生员。有效。我仍然是 postgresql 命令的菜鸟,所以我还在苦苦挣扎。不过谢谢
猜你喜欢
  • 1970-01-01
  • 2014-03-05
  • 2018-07-21
  • 2019-07-09
  • 1970-01-01
  • 1970-01-01
  • 2017-07-06
  • 2017-04-26
  • 1970-01-01
相关资源
最近更新 更多