我正在尝试为用户设置一种设置方式,我正在数据库中以json格式保存设置。当我尝试更新用户时,尽管我得到了以下语法错误:
警告:PDOStatement::execute():SQLSTATE[42000]:语法错误或访问违规:1064您的SQL语法有错误;检查与您的MariaDB服务器版本相对应的手册在"设置"附近使用的语法="{''"背景色''":''"050505''"}"中第1行的WHERE
ID
="2"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);
}
不能参数化表和列名。您需要将这些直接插入到查询字符串中。一种方法是:
$sql = "UPDATE `users` SET $field = :value WHERE `ID` = :id";