2011-11-29 74 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