2011-11-29 73 views
2

我有一个使用node-mysql查询MySQL数据库的node.js应用程序。MySQL查询中的变量导致错误

问题:看来,当我在查询中的表名称变量,事情停止工作。我错过了什么吗?

工作节点代码

client.query('SELECT * from tableA', 
       function(error, results, fields) { 
        if (error) 
         throw error; 
        callback(results); 
       }); 

非工作节点代码

client.query('SELECT * from ?', 
       [ tableA ], 
       function(error, results, fields) { 
        if (error) 
         throw error; 
        callback(results); 
       }); 
+1

表名通常不能作为参数传递。您需要使用动态SQL。 –

+0

可能重复[*在mysql sproc *中使用表名的变量](http://stackoverflow.com/questions/2754423/use-a-variable-for-table-name-in-mysql-sproc)和[ *在MySQL中:如何传递一个表名作为存储过程和/或函数参数?*](http://stackoverflow.com/questions/2977356/in-mysql-how-to-pass-a-table-name- as-stored-procedure-and-or-function-argument) – mellamokb

回答

3

你很可能只是表名追加到字符串(伪代码,我不知道node.js)

client.query('SELECT * from ' + [tablaA], 
       function(error, results, fields) { 
        if (error) 
         throw error; 
        callback(results); 
       }); 
+0

你有没有在你以前的问题的答案http://stackoverflow.com/questions/8317472/inserting-variables-into-sql-query-for-node -mysql :) –

+0

对,我想知道这是否适用于像PHP一般的MySQL查询,或者这是node.js特定的 – Nyxynyx

+1

在Mysql中,表名不允许是准备语句中的变量(?),我猜测nodejs在后台做了一个准备好的语句。 –

0

他们之所以不工作很明显。

从非工作代码查询将是:

SELECT * FROM '表A'

一种解决方案是从@Andreas的一个,但你将有同样的问题一个where语句或插入其他值,您不希望像“null”值一样被转义。 (转换为字符串)

同样的问题here

时退房source如何格式&从节点mysql的作品&逃生。

+1

我是否可以说表名,数据库名称,列名不能转义,而要添加到列和MySQL函数的值可以? – Nyxynyx

+0

我想说的是,占位符通常用于动态数据(参数) – malletjo