2013-02-21 14 views
16

Próbuję zaktualizować niektóre informacje w DB MYSQL, ale nie jestem pewien, jak to zrobić w pliku node.js. Jest to sterownik mysql używam https://github.com/felixge/node-mysqlNode.js zagadnienia dotyczące składni zapytania mysql AKTUALIZUJ GDZIE

Co mam tak daleko

connection.query('SELECT * FROM users WHERE UserID = ?', [userId], function(err, results) { 
if (results[0]) { 
if (results[0].Name!=name) { 
console.log(results[0].Name); 
connection.query('UPDATE users SET ? WHERE UserID = ?', [userId], {Name: name}); 
} 
console.log(results[0].UserID); 
} 
}); 

Wszystko działa z wyjątkiem ...

connection.query('UPDATE users SET ? WHERE UserID = ?', [userId], {Name: name}); 

W PHP chciałbym mieć to ...

mysql_query("UPDATE users SET Name='".$_GET["name"]."' WHERE UserID='".$row['UserID']."'"); 

Nie jestem pewien, co robię źle, ale jestem przekonany, że problem jest tutaj

connection.query('UPDATE users SET ? WHERE UserID = ?', [userId], {Name: name}); 

Odpowiedz

35

[Uwaga (dodane 2016-04-29): Ta odpowiedź została zaakceptowana, ale okazuje się, że jest tam rozsądny sposób wykorzystać SET ?. Aby uzyskać szczegółowe informacje, patrz odpowiedź Bala Clark na tej samej stronie. — ruakh]


Od the code for Connection.prototype.query() and Connection.createQuery(), to jasne, że można przekazać tylko w pojedynczych wartości obiektu. Nie widzę gdzie kod dla zachowania specjalnego SET ? jest zdefiniowany — wyraźnie nie jest w SqlString.formatQuery() —, ale jeśli używa on SqlString.objectToValues(), to myślę, że nie ma sposobu, aby użyć go razem z innym ?.

Myślę, że najlepszym rozwiązaniem jest po prostu zrezygnować z czystym SET ? funkcji i napisać jeden z nich:

connection.query('UPDATE users SET Name = ? WHERE UserID = ?', [name, userId]) 
connection.query('UPDATE users SET Name = :Name WHERE UserID = :UserID', 
        {UserID: userId, Name: name}) 

ale jeśli naprawdę chcesz używać SET ?, Przypuszczam, że mógł napisać to:

connection.query('UPDATE users SET ? WHERE UserID = :UserID', 
        {UserID: userId, Name: name}) 

który aktualizuje zarówno UserID i Name; chyba że masz wyzwalacz, ten powinien być być O.K., ponieważ aktualizuje UserID do wartości, która już i tak. Ale to trochę niepokojące i nie polecam tego.

+0

wydaje się działać: D dzięki! – agdurrette

+0

@MarcioJasinski: Dzięki za edycję sugestii, ale to naprawdę zmienia tę odpowiedź w sposób, który będzie unieważnić inne odpowiedzi na tej stronie. Zobaczę, czy mogę znaleźć bardziej zgrabny sposób dodawania tych informacji. . . – ruakh

+0

Należy wspomnieć, że aby implementacja ': Name' i': UserId' działała, należy uwzględnić konfigurację [custom-format] (https://github.com/mysqljs/mysql#custom-format). – Knowledge

15

Odpowiedź od ruakh nie jest całkowicie poprawna, można użyć funkcji SET ? z innym ?.

Składnia jest następująca:

connection.query('UPDATE users SET ? WHERE UserID = ?', [{ Name: name }, userId]) 
+1

Myślę, że musisz mieć błąd w swojej składni: z twoją wersją, w jaki sposób 'SET?' Może wiedzieć, że ustawione pole to 'Name'? – ruakh

11

Można użyć tablicę obiektów:

connection.query('UPDATE user SET ? WHERE ?', [{ Name: name }, { UserId: userId }]) 
+0

Dzięki @marcel próbowałem to działało – AnNaMaLaI

Powiązane problemy