https://github.com/mysqljs/mysql#introduction

mysqljs与转义值非常不一致,或者我不理解文档。

错误:

this.table = 'elections';
mysql.query('SELECT * FROM ? where name = ?', [this.table, this.votesTable]



  您的SQL语法有误。检查手册
  对应于您的MySQL服务器版本的正确语法错误:
  'SELECT * FROM \'elections \'其中name = \'prim1000 \'


但这有效:

`mysql.query('UPDATE elections SET updated_at = ? WHERE name = ?', [this.getTimeStamp(), this.votesTable])


但是,如果我在上面的查询中删除“ elections”并输入“?”相反,它将引发错误。因此,以下操作无效。

mysql.query('UPDATE ? SET updated_at = ? WHERE name = ?', [this.table, this.getTimeStamp(), this.votesTable])

最佳答案

在链接到文档页面的“转义查询标识符”部分下,您应该可以执行以下操作:

mysql.query('SELECT * FROM ?? where name = ?', [this.table, this.votesTable]


大多数SQL框架不允许将参数用于各个值之外的任何值。即不是表标识,列标识符,值列表或SQL关键字。 mysqljs库并不常见,因为它支持引用标识符和键/值对。



发表您的评论:

??占位符用于标识符。标识符的引号必须与值不同。在MySQL中,字符串值像'string'一样被引号引起来,但是标识符用反引号引起来。

SELECT * FROM `mytable` where name = 'myname'


mysqljs类使用??作为标识符的特殊占位符,因此您可以告诉该类必须用反引号引起来。

10-02 13:20