2013-07-30 41 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

看到我更新的帖子 –