node.js
  • postgresql
  • case-sensitive
  • 2015-08-09 36 views 1 likes 
    1

    如何使+的NodeJS PG如何使+的NodeJS PG

    我想選擇欄目內容==「[email protected]」區分大小寫查詢區分大小寫查詢,
    但似乎成爲選擇列=='[email protected]'?

    [error: column "[email protected]" does not exist] 
    

    代碼

    var userEmail = '[email protected]'; 
    
    var query = 'SELECT EXISTS(SELECT * FROM "User" WHERE "Email" = "'+userEmail+'")'; 
    dbClient.query(query, function(error, result) { 
        ... 
    

    回答

    1

    這沒有什麼關係的情況。問題在於,您要將電子郵件地址放在雙引號中,並且(多數種類)SQL中的雙引號表示列名或表名。這就是爲什麼錯誤消息說column "[email protected]" does not exist。各地值

    使用單引號:

    var userEmail = '[email protected]'; 
    var query = 'SELECT EXISTS(SELECT * FROM "User" WHERE "Email" = \'' + userEmail + '\')'; 
    

    理想的情況是,你應該只使用參數綁定,所以你不用擔心在所有引用值。當你使用字符串連接來建立SQL查詢時,你經常會打開自己的SQL注入攻擊。

    +0

    感謝您的回覆,你知道如何使用參數與'pg'像這樣'SELECT EXISTS(SELECT * FROM「User」WHERE 「Email」= $ userEmail)';'dbClient.query(query,$ userEmail,function(error,result){' – user1775888

    +1

    假設你使用node-postgres模塊,你應該閱讀關於參數化查詢的文檔,這裏:https://github.com/brianc/node-postgres/wiki/Prepared-Statements –

    1

    對於使用綁定參數必須號,與$1(然後$2等)開始時,然後把參數在Array:

    var query = 'SELECT EXISTS(SELECT * FROM "User" WHERE "Email" = $1)'; 
    dbClient.query(query, [userEmail], function(error, result) { 
    

    始終通過在陣列中的參數。最安全。

    切記不要傳遞一個函數來查詢你是否有一個非常大的表,除非你想在返回控制到de函數之前讀取所有的表。否則你可以使用「on」事件或使用承諾的方式(如https://www.npmjs.com/package/pg-promise-strict

    +0

    感謝您的回覆,什麼是「傳遞函數查詢」? – user1775888

    +0

    請參閱https://github.com/brianc/中的說明node-postgres/wiki/Client#parameters-1「注意:不要爲大的結果集提供這個函數,除非你可以將整個結果集加載到內存中」。在這種情況下,你可以使用:https:// github .COM/brianc /節點的Postgres /維基/客戶#簡單闕ry-without-callback或https://github.com/codenautas/pg-promise-strict#example-with-fetch-row-by-row –

    相關問題