首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在mysql / express中使用变量作为列名?

如何在mysql / express中使用变量作为列名?
EN

Stack Overflow用户
提问于 2018-09-20 23:18:33
回答 4查看 1.4K关注 0票数 2

目前我有这个问题,问题是表名得到一组引号(ad它是一个字符串),这会使服务器崩溃。

代码语言:javascript
复制
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,则会得到以下结果:

代码语言:javascript
复制
UPDATE scores
SET 'the name of my column' = 1
WHERE score_id = 1
EN

回答 4

Stack Overflow用户

发布于 2021-04-15 06:10:36

看起来您正在使用mysql NPM package

escape方法用于转义查询值。要转义查询标识符(如列名),应该改用escapeId方法。您的代码应如下所示:

代码语言:javascript
复制
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)}`;

同样,如果使用替换,请使用双问号而不是单问号来转义标识符。

代码语言:javascript
复制
const update =  'the name of my column';
const UpdateQuery = `UPDATE scores
    SET ?? = ?
    WHERE score_id = ?`;
const replacements = [update, newValue, singleScore.score_id];

See the mysql docs for more details.

票数 3
EN

Stack Overflow用户

发布于 2018-09-20 23:50:18

Tamilvanan解决方案只需稍加更改即可解决此问题

代码语言:javascript
复制
 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
EN

Stack Overflow用户

发布于 2018-09-20 23:35:32

对于奇怪的MySQL列名,不能用单引号将它们括起来。单引号只是将值转换为字符串。

在MySQL中,反引号用于此操作。例如

代码语言:javascript
复制
UPDATE `table with space` SET `column with space` = 'bar';
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52428398

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档