转义 Mysqljs 中的值

Escaping values in Mysqljs

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

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

错误:

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

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax error: 'SELECT * FROM \'elections\' where 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 框架不允许将参数用于除个别 之外的任何内容。 IE。不是 table 标识、列标识符、值列表或 SQL 关键字。 mysqljs 库不常见,因为它支持引用标识符和 key/value 对。


回复您的评论:

?? 占位符用于标识符。标识符必须与值不同地引用。在 MySQL 中,字符串值用 'string' 引用,但标识符用 back-ticks.

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

mysqljs class 使用 ?? 作为标识符的特殊占位符,所以你可以告诉 class 它必须用 back-ticks 引用。