2013-07-30 36 views
0

我必須更新數據庫中的一行,寫這個更新查詢中的node.js

var o_voto_foto = { 
    Profilo: profilo, 
    Foto: data.id_foto_votata, 
    punteggio: data.voto, 
}; 

connection.query('UPDATE prof_voto_foto SET ? WHERE profilo_id = :Profilo AND foto_id = :Foto',o_voto_foto, function(error, rows) { 
    if (error) { 
     var err = "Error on UPDATE 'votoFotoFancybox': " + error; 
     console.error(err); 
     throw err; 
    } 
    connection.end(); 

    callback(); 

}); 

但我得到一個語法錯誤。然而 ,如果查詢與該語法

connection.query('UPDATE prof_voto_foto SET punteggio = '+data.voto+' WHERE profilo_id = '+profilo+' AND foto_id = '+data.id_foto_votata,function(error, rows) { 

做我用這個外部庫 https://github.com/felixge/node-mysql

+0

「但是我得到一個語法錯誤」 - **你得到了什麼**語法錯誤? – Quentin

+0

錯誤:ER_PARSE_ERROR:您的SQL語法中有錯誤;檢查與您的MySQL服務器版本相對應的手冊,以便在第1行':Profilo AND foto_id =:Foto'處使用正確的語法。 – Barno

回答

0

o_voto_foto是一個對象。轉義尋找一個數組。嘗試使用[o_voto_foto]

+0

不可用, punteggio =:punteggio WHERE profilo_id =:Profilo公司和foto_id =:圖片」,[o_voto_foto] – Barno

3

這樣做肯定會工作:

var o_voto_foto = { 
    Profilo: profilo, 
    Foto: data.id_foto_votata, 
    punteggio: data.voto, 
}; 

var params = [o_voto_foto.punteggio, o_voto_foto.Profilo, o_voto_foto.Foto ]; 

connection.query('UPDATE prof_voto_foto SET punteggio = ? WHERE profilo_id = ? AND foto_id = ? ', params, function(error, rows) { 

在開始條目匹配其參數對象中,如果您註冊一個自定義queryFormat只會工作一個冒號查詢更換參數。看下面的例子。你不能混合?和以冒號開頭的參數。

connection.config.queryFormat = function (query, values) { 
    if (!values) return query; 
    return query.replace(/\:(\w+)/g, function (txt, key) { 
    if (values.hasOwnProperty(key)) { 
     return this.escape(values[key]); 
    } 
    return txt; 
    }.bind(this)); 
}; 

var params2 = { 
punteggio : '', 
profilo_id : '', 
photo_id : '' 
}; 

connection.query('UPDATE prof_voto_foto SET punteggio = :punteggio WHERE profilo_id = :profilo_id AND foto_id = :photo_id ', params2, function(error, rows) { 
+1

這正是該會做 –

+0

這麼想的工作,同樣的錯誤 對於插入沒問題 – Barno

+1

看到我更新的帖子 –