2017-04-25 5 views
0

重複キーの更新でMySQLクエリを実行しようとしていますが、「構文エラーまたはアクセス違反」エラーが発生するため、構文に何が間違っているかわかりません。PHP PDO MYSQL重複アップデート

コード:

$sql = "INSERT INTO site_configuration 
      (configuration_key, configuration_value, additional_data) 
     VALUES 
      (:config_key, :site_new_background, :site_background_meta) 
     ON DUPLICATE KEY UPDATE 
      'configuration_value' = VALUES(:site_new_background), 'additional_data' = VALUES(:site_background_meta)"; 
$smth = $database->prepare($sql); 
$smth->bindParam(':config_key', $config_key, PDO::PARAM_STR); 
$smth->bindParam(':site_new_background', $site_new_background, PDO::PARAM_STR); 
$smth->bindParam(':site_background_meta', $site_background_meta, PDO::PARAM_STR); 

エラーメッセージ:

メッセージと

'PDOException'「SQLSTATE [42000]:構文エラーまたはアクセス違反:1064あなたは、あなたのSQL構文でエラーが発生しています。近く「」configuration_value「= VALUESを使用する権利構文についてはMySQLサーバのバージョンに対応するマニュアルを確認してください(?)、 『additional_data』 = VALUES(?)」

+2

一重引用符を削除するarroundカラム名 – Jens

+2

プレースホルダを再利用することはできません。 –

答えて

1

を声明から単一引用符を削除

$sql = "INSERT INTO site_configuration 
       (configuration_key, configuration_value, additional_data) 
      VALUES 
       (:config_key, :site_new_background, :site_background_meta) 
      ON DUPLICATE KEY UPDATE 
       configuration_value = VALUES(:site_new_background), additional_data = VALUES(:site_background_meta)"; 
+0

これは動作します。私は単一引用符を削除しなければならなかったし、Jon Stirlingが私の質問にコメントしたのでプレースホルダを再利用することはできないので、疑問符を使って修正して配列を実行するようにした。また、私は、プレースホルダが重複キー更新であることに気付きました。ここでは、カラム名は次のようになります。 'VALUES(configuration_value)、addiotional_data = VALUES(additional_data)' – Diamonte