2016-01-29 1 views
1

J'ai la requête suivante que je veux modifier dans un INSERT en tbl si elle n'existe pas ou UPDATE si c'est le cas. J'essaie ce qui suit mais je n'ai pas de joie jusqu'à présent - quel est le problème avec ma requête ci-dessous?Insertion dans tbl sur Erreur de mise à jour de clé en double

$sql = "INSERT INTO tbldata (temperature, temperature_feels, humidity, precipitation) ON DUPLICATE KEY UPDATE id = ?, temperature = ?, temperature_feels = ?, humidity = ?, precipitation = ?"; 

- mise à jour - Ce ne fonctionne pas ... ce que je fais mal?

 $sql = "INSERT INTO weather_data (uv, weather_status, weather_type, temperature, temperature_feels, humidity, precipitation) 
       VALUES (?,?,?,?,?,?,?) 
       ON DUPLICATE KEY UPDATE 
       uv = ?, 
       weather_status = ?, 
       weather_type = ?, 
       temperature = ?, 
       temperature_feels = ?, 
       humidity = ?, 
       precipitation = ? 
       UID = ?"; 

- mise à jour - mon schéma

'UID', 'char(17)', 'NO', 'PRI', NULL, '' 
'stationID', 'int(11)', 'YES', '', NULL, '' 
'temperature', 'float', 'YES', '', NULL, '' 
'UV', 'float', 'YES', '', NULL, '' 
'temperature_feels', 'float', 'YES', '', NULL, '' 
'humidity', 'float', 'YES', '', NULL, '' 
'weather_type', 'int(11)', 'YES', '', '-1', '' 
'precipitation', 'float', 'YES', '', NULL, '' 
'update_station_id', 'tinyint(4)', 'YES', '', '1', '' 
'update_due', 'timestamp', 'YES', '', NULL, '' 
'weather_status', 'varchar(128)', 'YES', '', NULL, '' 
+0

Comment puis-je tester cette requête avec liaison dans mon client mysql? – Zabs

+1

Veuillez fournir le schéma de votre table weather_data afin que nous puissions voir quelle clé primaire et quels index uniques vous avez en place. –

+0

Ma clé primaire est le champ UID – Zabs

Répondre

4

Vous oubliez écrire le values ici insert requête

$sql = "INSERT INTO tbldata (temperature, temperature_feels, humidity,precipitation) 
VALUES (?,?,?,?) 
ON DUPLICATE KEY UPDATE 
id = ?, 
temperature = ?, 
temperature_feels = ?, 
humidity = ?, 
precipitation = ?"; 

lien pour plus d'infos http://dev.mysql.com/doc/refman/5.7/en/insert-on-duplicate.html

+0

désolé .. des idées ce que j'ai mal fait avec ma requête modifiée ci-dessus? – Zabs

+0

@Zabs hy, vous oubliez d'écrire le mot clé 'values' et ses valeurs dans la requête intégrée lorsque vous utilisez' ON DUPLICATE KEY UPDATE', vous devez écrire une requête d'insertion avec des valeurs et au dernier champ de mise à jour comme ci-dessus –