2013-07-05 71 views
0

任何人都可以讓我知道什麼MI做錯了.....INSERT WITH SELECT查詢在SQLITE中給我的語法錯誤?

這裏是我的查詢,並試圖運行SQLite數據庫管理查詢,以及它的執行過程中總是進入"errorfunction"當越來越語法錯誤"near SELECT"在PhoneGap的應用

tx.executeSql("INSERT INTO proposal_products(proposal_id,date_created,date_modified,labour_hours,cost_price,sale_price,adj_cost_price,adj_sale_price,service_price,adj_service_price,discipline_products_id) VALUES(" 
         + window.localStorage 
           .getItem("assign_proposal_id") 
         + ",'" 
         + getCurrentDateTime() 
         + "','" 
         + getCurrentDateTime() 
         + "'," 
         + selectedLabourHours 
         + ","+ callStd +"," 
         + callStd +"," 
         + callStd +"," 
         + callStd +"," 
         + callStd +"," 
         + callStd +",(SELECT id FROM discipline_products WHERE discipline_products.product_id = (SELECT id FROM products WHERE c4w_code = "CALSTD")))", 
       [], 
       function() { 
        console 
          .log("suceessCBinsertIntoProposalProduct when Checkbox unchecked:"); 
        window.localStorage.setItem("discipline_product_idCallStd","discipline_IdCallSTD"); 
       }, 
       function(err) { 
        console 
          .log("errorCBinsertIntoProposalProduct when Checkbox unchecked:" 
            + err.message); 


}); 
+1

首先要解決:*不建立SQL像*。使用準備好的語句。它將使得更容易看到語法錯誤*並*它將保護您免受轉換錯誤和SQL注入攻擊。 –

+0

請參閱'SELECT ID FROM products WHERE c4w_code =「CALSTD」'而不是它應該是'SELECT ID FROM products WHERE c4w_code =「+ CALSTD +」' – CRUSADER

+0

@jon它的sqlite查詢不是sql – nida

回答

0

的語法錯誤是在這裏:

+ callStd +"[...] WHERE c4w_code = "CALSTD")))", 

你大概的意思是:

+ callStd +"[...] WHERE c4w_code = 'CALSTD')))", 

正因爲如此,在您關閉字符串文字,然後得到CALSTD ...

但是,你真的應該不能建立SQL你此刻做的方式。閱讀起來非常困難,容易出現轉換錯誤(尤其是日期/時間值)並打開至SQL injection attacks。使用參數化SQL,但是這是在您的環境中完成的。如果你的環境不支持參數化SQL,我會感到非常驚訝。

+1

先生,你如何確認'CALSTD'是一個值而不是一個變量......?或者,可能是你只知道它... – CRUSADER

+0

CALSTD是一個值不是一個變量 – nida

+1

@CRUSADER:這是一個受過教育的猜測,基於一)報價是已經,只是一種錯誤的報價; b)不遵循與代碼中的任何名稱相同的約定。 –