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

ny6fqffe  于 2021-06-19  发布在  Mysql
关注(0)|答案(3)|浏览(381)

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

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

pdkcd3nj

pdkcd3nj1#

泰米尔瓦南解决方案稍加改动就解决了这个问题

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)`);
            }
          );
vsmadaxz

vsmadaxz2#

检查以下代码。可能有用,

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)} 包括值的单引号。

xesrikrc

xesrikrc3#

对于奇怪的mysql列名,不能在其周围加单引号。单引号将值转换为字符串。
在mysql中,backtick用于此。例如

UPDATE `table with space` SET `column with space` = 'bar';

相关问题