2016-04-30 35 views
0

ユーザーが設定を行う方法を設定しようとしていますが、設定をdatabseのjson形式で保存しています。ユーザーを更新しようとすると、次の構文エラーが表示されます。SQL構文の更新時にエラーが発生しました

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\"}' WHERE ID = '2'' at line 1 in C:...\htdocs\app\model\model.database.php on line 29

ここにはコードがあります。

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

答えて

0

パラメータ化テーブルと列名を使用することはできません。それらを直接クエリ文字列に挿入する必要があります。 1つの方法は次のとおりです。

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

SQLインジェクションから安全ですか?私はそうではないはずのユーザーによってフィールドが渡されていない限り、私はそれを推測するでしょう。 – MisterQuacker

+0

それはしばらくの間それに固執し、それは働いた!ありがとうトン。 – MisterQuacker

関連する問題