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类使用
??
作为标识符的特殊占位符,因此您可以告诉该类必须用反引号引起来。