SQL语法更新错误

时间:2016-04-30 17:48:09

标签: php mysql sql syntax-error

我正在尝试为用户设置一种设置方式,我在数据库中以json格式保存设置。当我尝试更新用户时,我收到此语法错误:

  

警告:PDOStatement :: execute():SQLSTATE [42000]:语法错误或   访问冲突:1064您的SQL语法有错误;检查   与您的MariaDB服务器版本对应的手册   在''settings'='{\“background-color \”附近使用的语法:\“050505 \”}'   WHERE ID ='2''在第1行   C:第29行的...... \ htdocs \ app \ model \ model.database.php

这是我的代码。

public function setColor(){
    $modUser = $this->model('user');
    $modInput = $this->model('input');
    $modViewData = $this->model('viewData');
    $modUser->setSetting("background-color",str_replace('#', "", $modInput->returnPost("color")));
    $this->view('profile/view.profile', $modViewData->getData());
}
//in User model
public function setSetting($name, $value){
    $settings = $this->getSetting();
    $settings[$name] = $value;
    $settings = json_encode($settings);
    $this->update("settings", $settings);
}
public function update($field, $value){
    $sql = "UPDATE `users` SET :field = :value WHERE `ID` = :id";
    $params = [":field" => $field, ":value" => $value, ":id" => $this->_data->ID];
    $database = $this->model('database');
    $database->query($sql,$params);
}

1 个答案:

答案 0 :(得分:0)

您不能参数化表格和列名称。您需要将它们直接插入查询字符串中。一种方法是:

$sql = "UPDATE `users` SET $field = :value WHERE `ID` = :id";