我正在尝试使用 node-mysql 更新包含 Node 中的点的列名称。我喜欢您只需给它一个带键的对象就可以轻松地更新多个列,但是 node-mysql 对字符串的转义在这里失败了。
这是我的代码:
socket.on('settings',function(data){
console.log(data);
database.query('UPDATE Settings SET ? WHERE ?',[data,{name:socket.name}],function(err,rows){
if(err) console.log(err);
});
});
当此事件以 data = {'a.b':'hello'} 触发时,会出现以下错误:
{ [Error: ER_PARSE_ERROR: You have an error in your SQL syntax; check the manual
that corresponds to your MySQL server version for the right syntax to use near
''`a`.`b` = 'hello'' WHERE `name` = 'somename'' at line 1]
我知道不在我的列名称中使用点可以解决我的问题,但我真的希望它们在那里。
编辑: 似乎使用“a.b”作为列名会给我 ER_BAD_FIELD_ERROR,与“a.b.c”相同,即使它们在表中,但当我使用“a.b.c.d”时它说 ER_PARSE_ERROR。我很困惑。我不会在我的列名称中使用点,但我仍然想知道为什么它会生成不同数量的点的不同错误。
最佳答案
错误消息中的符号:
`a`.`b`
表示“current_database”(如果 a 不是数据库名称)->“名称为‘a’的表”->“名称为‘b’的列”。所以如果想在列名中使用点,你应该用反引号将它整个引用:
UPDATE table_name.`a.b` = 'hello' WHERE `name` = 'somename';
顺便说一句,我更喜欢使用双下划线表示法而不是点(a__b),因为不使用 backtiks 进行 qouting,请考虑一下。
关于javascript - 在 MySQL 数据库中使用点 - 使用 Node 更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35114681/