2012-12-07 60 views
0

我有以下代碼...更新PHP-SQL語句不工作 - 沒有顯示錯誤

$interactionid = '123'; 
$interactioncode = "ECWL"; 
$oldDOL = $_GET['oldDOL']; 

$newDOL = $_GET['newDOL']; 


    include("ORCLconfig.php"); 
    $addWSclaim = oci_parse($conn, "UPDATE claims SET DATE_OF_LOSS='$newDOL' WHERE NUMBER='32122'"); 
        oci_execute($addWSclaim, OCI_COMMIT_ON_SUCCESS); 


    $addtointeractionMAKE = oci_parse($conn, "INSERT INTO interaction_items VALUES (null, '$interactionid', '$interactioncode', '$oldDOL', '$newDOL', localtimestamp)"); 
          oci_execute($addtointeractionMAKE, OCI_COMMIT_ON_SUCCESS); 

oldDOL和newDOL是其格式爲DD-MMM-YY是內嵌在DATE_OF_LOSS到達日期列在索賠表中。

但是隻有第二條語句似乎正在工作,因爲索賠表沒有變化,也沒有顯示任何錯誤。

我正在使用Oracle數據庫,如果我在SQL控制檯中執行更新語句,它工作正常。

我知道這將是一些非常簡單的,我已經在某種程度上被忽視,但任何幫助,將不勝感激:)

+1

1)SQL注入2)您的INSERT語法是錯誤的(除非這是Oracle voodoo,您不必在表格後指定字段名稱) – Leigh

+0

首先,我建議您使用oci_bind(_by_name)作爲您的varialbes查詢/插入。它比instring變量更清晰,更安全。一個不工作的oci_execute會給你一個真的還是假的回來?如果它是錯誤的oci_error()是什麼? – Najzero

+0

@ jampez77 第一個oci_execute返回的值是什麼?如果它是假的,那麼檢查oci_error返回的是什麼。 –

回答

1

嘗試

$addWSclaim = oci_parse($conn, "UPDATE claims SET DATE_OF_LOSS='$newDOL' WHERE NUMBER='32122'"); 

if ($addWSclaim) { 
    if (oci_execute($addWSclaim, OCI_COMMIT_ON_SUCCESS)) { 
     if (oci_num_rows($addWSclaim) === 0) { 
     /* No rows affected */ 
     } 
    } else { 

     /*Handle error through oci_error*/ 
    } 
} else { 
    /* Handle parse error */ 
} 

oci_execute成功返回TRUE或FALSE的失敗。

+0

仍然沒有什麼好擔心的:/ – jampez77

+0

@ jampez77 你可以檢查受影響行的數目 –

+0

@ jampez77 你是否執行了任何語句在此代碼之前?根據文檔「事務在第一條SQL語句更改數據時使用OCI_NO_AUTO_COMMIT標誌執行oci_execute()時開始,其他語句所做的其他數據更改將成爲同一事務的一部分。事務被提交或回滾,數據庫的其他用戶在提交之前不會看到更改。「 –