使用Node在准备好的语句中转义数据库名称

时间:2019-02-20 00:37:09

标签: mysql node.js

我正在尝试使用mysql库来请求我的数据库。

我需要在查询占位符中使用语法,所以我尝试了一个简单的请求:

connection.query('DROP DATABASE IF EXISTS ?;', ['mydb']);

但这会导致:

'You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near \'\'mydb\'\' at line 1'

查询确实是:

'DROP DATABASE IF EXISTS \'mydb\';'

那么这实际上应该如何工作?

1 个答案:

答案 0 :(得分:1)

MySQL的表示法是:

DROP DATABASE IF EXISTS `mydb`

由于您将其转义为字符串,因此它不能删除数据库引用。

出于某些原因,某些驱动程序支持备用占位符:

DROP DATABASE IF EXISTS ??

通常您不能对数据库,列或表之类的内容使用占位符值,因为它们的处理方式有所不同。这是驱动程序的限制。

您只需要注意用户提供的值和名称中带有不规则字符的名称。这些必须根据MySQL schema identifier rules进行转义。