2012-12-09 104 views
1

這一個讓我難住。我的三個客戶都收到了這個錯誤,但我不能在我的最後重現它!無法重現此[ODBC Microsoft Access驅動程序]語法錯誤

[Macromedia][SequeLink JDBC Driver][ODBC Socket][Microsoft][ODBC Microsoft Access Driver] Syntax error in INSERT INTO statement.

一般,什麼會導致誰收到這樣的DB錯誤的不一致時,什麼樣的問題會阻止我能複製它在我結束?

這裏的代碼位,我相信是會導致錯誤:

<cfquery 
name="rsAddSKUs" 
datasource="#request.dsn#" 
username="#request.dsnUsername#" 
password="#request.dsnPassword#"> 
    INSERT INTO 
    tbl_orderskus 
     (orderSKU_OrderID 
     , orderSKU_SKU 
     , orderSKU_Quantity 
     , orderSKU_UnitPrice 
     , orderSKU_SKUTotal 
     , orderSKU_Picked 
     , orderSKU_TaxRate 
     , orderSKU_DiscountID 
     , orderSKU_DiscountAmount) 
    VALUES 
     ('#var.ThisOrderID#' 
     , #rsGetCart.SKU_ID# 
     , #rsGetCart.Qty# 
     , #rsGetCart.SKU_Price# 
     , #SKUTotal# 
     , 0 
     , #var.thisProductTax# 
     , #var.thisDiscountID# 
     , #var.thisdiscountAmount#) 
</cfquery> 

感謝, 比斯科蒂

+2

另外,你應該使用'cfqueryparam'。在sql中直接使用原始客戶端值絕不是一個好主意 - 即使使用MS Access。 – Leigh

+0

@Leigh大提示。爲了可伸縮性的原因,Im實際上正在將網站遷移到mySQL。使用cfqueryparam編碼有什麼缺點,或者更好的方法來處理SQL中的SQL注入? – BiScotti

+1

沒有什麼是完全沒有怪癖的,但對於基本的cfquery保護,cfqueryparam是最好的選擇。另外它還有很多其他好處,例如類型檢查,列表處理,促進查詢計劃重用(幫助性能)。這些是使用它的主要原因。基本的sql注入保護只是一個獎金。 – Leigh

回答

4

我的第一個傾向是數字領域之一是空白和插入語句嘗試,而不是一個值

+0

我認爲你是正確的,它看起來像我設置數據庫期待在該欄中的數字 – BiScotti

+0

您需要添加一些條件邏輯,以便如果該值不是一個數字,將null插入到該列中。 –

+0

「null」或默認編號(如果適用)。這兩個逗號之間有一些*值。否則,它不是一個有效的sql語句。 – Leigh

4

您可以登錄「插入」命令日誌文件,然後讓你的客戶得到他們向您發送日誌文件以查看有問題的插入命令是什麼?

我在想如果插入命令取決於用戶輸入,那麼他們可能會輸入一些奇怪的東西。

+0

你的觀點很好。直到這個錯誤,我實現了cferror來通知我後面發生的錯誤種類! – BiScotti

0

裹插入,,在val()所有的數值,讓你得到0,而不是空的串。

相關問題