我在一个类中有这个功能。插入就像完全相同的查询(但显然是INSERT)并且它完美无缺。
我现在正在尝试使用该对象具有的属性更新数据库并且它没有更新,它回应“未更新的行”我已经尝试了所有内容并且我将我的代码与工作的示例进行了比较,我不知道为什么它是不工作!这让我疯了。
CODE:
public function update() {
$query = "UPDATE ".$this->tablename."
SET
itemtype = :itemtype,
category = :category,
title = :title,
content = :content,
active = :active,
keywords = :keywords,
order = :order,
featured = :featured
WHERE id = ".$this->id;
$this->conn->beginTransaction();
$q = $this->conn->prepare($query);
$q->execute(array(":itemtype"=>$this->itemtype, "category"=>$this->category, "title"=>$this->title,
":content"=>$this->content, ":active"=>$this->active, ":keywords"=>$this->keywords,
":order"=>$this->order, ":featured"=>$this->featured));
if($q->rowCount() > 0) {
echo "Rows updated = ".$q->rowCount()."<br/>";
$return = true;
} else {
echo "Rows not updated<br/>";
$error = $this->conn->errorInfo();
$this->SQLerror = $error[2];
$return = false;
}
$this->conn->commit();
return $return;
}
只知道errorInfo返回NULL,就像没有任何SQL Sintax错误一样!
答案 0 :(得分:2)
把冒号放在这里:
"category"=>$this->category, "title"=>
应该是:
":category"=>$this->category, ":title"=>
请确保$this->tablename
和$this->id
不会导致任何语法错误。
单词Order在SQL中保留。用反引号逃脱它:
`order` = :order,
答案 1 :(得分:1)
您在if($q->$q->rowCount() > 0)
Manual
commit()