Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 转义具有节点的准备语句中的数据库名称_Mysql_Node.js - Fatal编程技术网

Mysql 转义具有节点的准备语句中的数据库名称

Mysql 转义具有节点的准备语句中的数据库名称,mysql,node.js,Mysql,Node.js,我正在尝试使用库请求我的数据库 我需要使用查询占位符的语法,因此我尝试了一个简单的请求: connection.query('DROP DATABASE IF EXISTS?;',['mydb']) 但这导致: “您的SQL语法有错误;请查看与MySQL服务器版本对应的手册,以了解第1行“mydb”附近使用的正确语法。 问题确实是: 'DROP DATABASE IF EXISTS'mydb\';' 那么这实际上应该如何工作呢?MySQL表示法是: DROP DATABASE IF EXISTS

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

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

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

但这导致:

“您的SQL语法有错误;请查看与MySQL服务器版本对应的手册,以了解第1行“mydb”附近使用的正确语法。

问题确实是:

'DROP DATABASE IF EXISTS'mydb\';'


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

MySQL表示法是:

DROP DATABASE IF EXISTS `mydb`
因为您将其作为字符串转义,所以它不能删除数据库引用

某些驱动程序支持备用占位符的原因如下:

DROP DATABASE IF EXISTS ??
通常不能对数据库、列或表等对象使用占位符值,因为它们的处理方式不同。这是驾驶员的限制


您只需要注意用户提供的值和名称中包含不规则字符。需要根据进行转义。

尝试将['mydb']更改为“my\u db\u name”。比如conncection.query('statement','my_db_name');第二个选项:connection.query('DROP DATABASE IF EXISTS(?);',['mydb']);您可能无法将占位符值用于数据库名称之类的内容。这些不是字符串。@NikolayVetrov尝试了这两种方法,但都不起作用。@tadman我想这是真的。尝试另一种方法:connection.query('DROP DATABASE IF EXISTS'+connection.escape(db_name));好的,我并不介意数据库名称,但是对于列和表,我应该做什么呢?这取决于MySQL驱动程序的功能。大多数不能作为占位符来执行,因此您需要手动执行,或者使用驱动程序函数(如果有)。类似于
x=>connection.escape(x)。replace(/^'(.*)$/,“$1”)
?例如,支持将
作为标识符的准备语句占位符。其他人则使用不同的符号。这里的想法是符合MySQL的标识符转义,如答案中所链接的。因为如果我删除引号,我确实会得到
DROP DATABASE if EXISTS mydb
,这是正确的。。。但我可能会用反勾来代替它