当前我有这个问题,问题在于表名得到了一组引号(如果是字符串),这会使服务器崩溃。
const update = 'the name of my column';
const UpdateQuery = `UPDATE scores
SET ${mysql.escape(update)} = ${mysql.escape(newValue)}
WHERE score_id = ${mysql.escape(singleScore.score_id)}`;
mysql.escape()
除了列名之外的所有内容都可以正常工作。
这是我在注入变量后用console.log查询的结果:
UPDATE scores
SET 'the name of my column' = 1
WHERE score_id = 1
答案 0 :(得分:1)
泰米尔瓦南解决方案稍作改动即可解决该问题
db.query(
'UPDATE scores SET '+update+' = ? Where score_id = ?',
[newValue, singleScore.score_id],
(err, result) => {
if (err) throw err;
console.log(`Changed ${result.changedRows} row(s)`);
}
);
答案 1 :(得分:0)
对于怪异的MySQL列名,您不能在它们周围加上单引号。单引号将值转换为字符串。
在MySQL中为此使用了反引号。例如
UPDATE `table with space` SET `column with space` = 'bar';
答案 2 :(得分:0)
检查以下代码。可能有用,
con.query(
'UPDATE scores SET '+update+' = ? Where score_id = ?',
// Old - [${mysql.escape(newValue)}, ${mysql.escape(singleScore.score_id)}],
/* Update - */ [newValue,singleScore.score_id],
(err, result) => {
if (err) throw err;
console.log(`Changed ${result.changedRows} row(s)`);
}
);
根据您的查询,${mysql.escape(update)}
包含值中的单引号。
答案 3 :(得分:0)
您似乎在使用 mysql NPM package。
escape
方法用于转义查询值。要转义查询标识符(如列名),您应该改用 escapeId
方法。您的代码应如下所示:
const update = 'the name of my column';
const UpdateQuery = `UPDATE scores
SET ${mysql.escapeId(update)} = ${mysql.escape(newValue)}
WHERE score_id = ${mysql.escape(singleScore.score_id)}`;
同样,如果您使用替换,请使用双问号而不是单问号来转义标识符。
const update = 'the name of my column';
const UpdateQuery = `UPDATE scores
SET ?? = ?
WHERE score_id = ?`;
const replacements = [update, newValue, singleScore.score_id];