PDO准备声明(更新)不起作用

时间:2014-01-10 06:08:38

标签: php pdo

我在一个类中有这个功能。插入就像完全相同的查询(但显然是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错误一样!

2 个答案:

答案 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()