[英]Escaping database name in prepared statement with Node
我正在尝试使用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\\';'
那么这实际上应该如何工作?
MySQL的表示法是:
DROP DATABASE IF EXISTS `mydb`
由于您将其转义为字符串,因此它不是数据库引用,因此可以删除。
出于这个原因,某些驱动程序支持备用占位符:
DROP DATABASE IF EXISTS ??
通常,您不能对数据库,列或表之类的内容使用占位符值,因为它们的处理方式有所不同。 这是驱动程序的限制。
您只需要注意用户提供的值和名称中带有不规则字符的名称。 这些需要根据MySQL模式标识符规则进行转义。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.