我正在尝试通过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
答案 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;
}