2017-05-16 4 views
0

Ich benutze Node.js mit MySQL. Alles funktioniert gut, aber ich habe Probleme bei der Verwendung der UPDATE Abfrage.Abfrage aktualisieren mit MySQL und Node.js

My database table looks like this: 

id  | employeeId 
54027 | 8241 
63708 | 3421 
393835 | 3687 

für externes Updates zu überprüfen, ich bin eine Anforderung an eine API mit dem folgenden Code zu senden:

const obj = response.data.map(function(item) { 
     return { id: item.entryId.id, employeeId: item.employeeId.id }; 
}); 

Einen console.log diesen, gibt die folgenden:

[ { id: 54027, employeeId: 8242 }, 
    { id: 63708, employeeId: 3422 }, 
    { id: 393835, employeeId: 3688 } 
] 

Da mein API-Aufruf Daten zurückgegeben hat, die sich von denen in meiner Datenbank unterscheiden, möchte ich eine UPDATE-Abfrage an MySQL ausgeben, indem ich den folgenden Code verwende:

const query = connection.query('UPDATE entries SET employeeID = ? WHERE entrieId = ?', obj, 
(error, results, fields) => { 
    if (error) console.log(error); 
    else { 
     console.log('Updated!'); 
    } 
}); 

Ich erhalte eine Fehlermeldung, dass ich die falsche SQL-Syntax verwenden, dann bekomme ich diese am Boden:

UPDATE entries SET employeeID = id = 54027, EmployeeId = 8242 WHERE entrieId = id = 63708,= 3422 EmployeeId

Ich verfolge Tutorials und andere Ratschläge in Foren/Dokumentation für den besten und korrekten Weg, das UPDATE zu veröffentlichen, und ich bin verwirrt über mein Ergebnis.

+0

Sie sind keine verbindlichen Parameter korrekt. Welche Abfrage möchten Sie eigentlich ausführen? –

+0

Ich versuche, jede Zeile in der Datenbank zu aktualisieren, wobei die ID der ID aus dem API-Aufruf entspricht, und aktualisieren Sie dann die Zeilen employeeID. –

+0

Im Grunde führt dies zum gleichen Fehler - es wird nur dreimal wiederholt und der Fehler angezeigt. –

Antwort

0
let query = ''; 
for(var i = 0, len = obj.length; i < len; i++) { 
query += 'UPDATE entries SET employeeID ='+obj[i]['employeeID']+' WHERE entrieId = '+obj[i]['id']+';' 
} 
connection.query(query, 
(error, results, fields) => { 
    if (error) console.log(error); 
    else { 
     console.log('Updated!'); 
    } 
}); 
0

Beim Formatieren von SQL-Abfragen werden JSON-Objekte in key = 'val'-Paare umgewandelt. Schauen Sie sich https://github.com/mysqljs/sqlstring#escaping-query-values an. Betrachten Sie den folgenden Code,

var data = {email: "[email protected]", status: 2} // consider some dummy data 
var formattedQ = SqlString.format("UPDATE users SET ? WHERE id = 34", data); 

// formattedQ would be: 
"UPDATE users SET `email` = '[email protected]', `status` = 2 WHERE id = 34" 

Für Ihr Problem sollten Sie ein Array von Werten verwenden, die employeeId und id.

var data = [8242, 54027] // 8242 is employeeId and 54027 is id. 
var q = "UPDATE entries SET employeeID = ? WHERE entrieId = ?"; 
connection.query(q, data, (err, results, fields) => { 
    // Your code here 
}); 

// This would execute the following formatted query: 
UPDATE entries SET employeeID = 8242 WHERE entrieId = 54027 
Verwandte Themen