MisterQuacker MisterQuacker - 2 years ago 100
SQL Question

SQL Syntax Error with update

I'm trying to set up a way for users to set settings, i'm saving the settings in a json format in the databse. When I try to update the user though I get this syntax error:

Warning: PDOStatement::execute(): SQLSTATE[42000]: Syntax error or
access violation: 1064 You have an error in your SQL syntax; check the
manual that corresponds to your MariaDB server version for the right
syntax to use near ''settings' = '{\"background-color\":\"050505\"}'
= '2'' at line 1 in
C:...\htdocs\app\model\model.database.php on line 29

Here is the code that I have.

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');

Answer Source

You cannot a parameterize table and column names. You need to insert those directly into the query string. One method is:

$sql = "UPDATE `users` SET $field = :value WHERE `ID` = :id";
Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download