2017-04-25 102 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語法錯誤;檢查對應於你的MySQL服務器版本使用附近的'configuration_value「= VALUES正確的語法手冊(?),‘additional_data’= VALUES(?)」

+2

刪除單引號圓柱名稱 – 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對我的問題發表了評論,所以我使用問號和放置數組來執行它。另外我注意到我有佔位符在DUPLICATE KEY UPDATE上,它們應該是列名,例如:'VALUES(configuration_value),addiotional_data = VALUES(additional_data)'' – Diamonte