2017-09-05 38 views
2

我使用node.js使用Query配置對象訪問PostgreSQL表;如何在node-postgres中的查詢配置對象中使用雙引號聲明一個字符串

我想構建的選擇是'SELECT * FROM "Customers" WHERE "CustomersID" = 1',它可以與數據庫一起使用。

現在,這是我正在使用的查詢對象;

const query = { 
    text: 'SELECT * FROM $1 WHERE "CustomersID" = $2', 
    values : ["Customers",1], 
} 

,但我得到$ 1「達到或接近語法錯誤‘’錯誤。 我嘗試不同的方式與「和/或」,但似乎並沒有爲我工作。

在值數組中聲明$ 1爲帶雙引號的字符串的正確方法是什麼?

謝謝 格斯

回答

0

Parameterized Queries/Prepared Statements被格式化在服務器側,這不允許變量列或表名,以對抗SQL注入,這是足夠的,雖然不必要矯枉過正,並因此限制所規定PostgreSQL服務器。

單獨的轉義列/表名實際上足以防止SQL注入,但它必須在您身邊完成,並且基本驅動程序node-postgres不支持其查詢格式。

作爲替代,pg-promise完全支持這一點:

db.query('SELECT * FROM $1:name WHERE "CustomersID" = $2', ['Customers', 1]); 
// OR: 
db.query('SELECT * FROM $1~ WHERE "CustomersID" = $2', ['Customers', 1]); 

它使用自己的SQL Names符號正確逃生列/表名。我們可以將:name~附加到變量,以指示變量表示SQL名稱,而不是常規值。

相關問題