2016-01-21 73 views
0

我有一個php腳本,它從sql server運行存儲過程並在數據庫中存在的表中輸入數據。當我運行php腳本時,即使數據庫中存在相同的數據,它也會輸入重複日期。 我需要擺脫這些重複的數據。 存儲過程給了我正確的輸出,但它是這個php腳本這是困擾我php腳本在數據庫中輸入重複數據

 while ($obj = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC )) 
{ 

    if($obj['Bank_Name']!= $obj['Bank_Name_old']) 
      {  
      $obj['company_code']; 
      $obj['Account_Code']; 
      $obj['Bank_Name']; 
      $obj['Bank_Name_old']; 
      $obj['field_name']='Bank Name'; 

      if($obj['field_name']='Bank Name') 
      { 
       $old=$obj['Bank_Name_old'];  
       $new=$obj['Bank_Name']; 
      } 
        $query="insert into vns_db.dbo.client_details_log (company_code,client_id,field_name,original_value,new_value) values ('".$obj['company_code']."', 
          '".$obj['Account_Code']."','".$obj['field_name']."','$old','$new')";  
          $res = sqlsrv_query($conn,$query); 
          //$obj['modified_fields']=$obj['field_name'].'|'.addslashes('$old').'|'.addslashes('$new'); 

         // echo $query; 
      } 
     if($obj['Bank_AcNo'] != $obj['Bank_AcNo_old']) 
      { 
        $obj['company_code']; 
        $obj['Account_Code']; 
        $obj['Bank_AcNo']; 
        $obj['Bank_AcNo_old']; 
        $obj['field_name']='Bank account number'; 

         if($obj['field_name']='Bank account number') 
      { 
        $old=$obj['Bank_AcNo_old']; 
        $new=$obj['Bank_AcNo'];   
      } 
        $query="insert into vns_db.dbo.client_details_log (company_code,client_id,field_name,original_value,new_value) values ('".$obj['company_code']."', 
          '".$obj['Account_Code']."','".$obj['field_name']."','$old','$new')"; 
          $res = sqlsrv_query($conn,$query); 
          //$obj['modified_fields']=$obj['field_name'].'|'.addslashes('$old').'|'.addslashes('$new'); 
          //echo $query; 

      } 
+0

'如果($ OBJ [ 'FIELD_NAME'] = '行名')'將永遠是真實的,最有可能要使用''==那裏。 'if($ obj ['field_name'] ='銀行賬號')'相同。 –

+0

所有隻包含這些內容中的一行:'$ obj ['company_code'];'完全沒用。他們什麼都不做。 –

+0

這不是問題。當我運行腳本時,它將正確的數據插入到數據庫中。當我再次運行腳本它進入相同的data.i有8個不同的值爲上述query.when我第一次運行它給了我8 rows.when再次運行它給16行 –

回答

2

有執行的可能性都,如果在你的循環條件:

if($obj['Bank_Name']!= $obj['Bank_Name_old']) 

if($obj['Bank_AcNo'] != $obj['Bank_AcNo_old']) 

這可能會運行插入兩次 試用:)

+0

這不是問題。當我運行腳本時,它會將正確的數據插入到數據庫中。當我再次運行腳本時,它輸入相同的數據。對於上面的查詢,我有8個不同的值。當我第一次運行它時,它給了我8行。當再次運行時,它給出了16行 –

0

如果if($obj['Bank_Name']!= $obj['Bank_Name_old'])if($obj['Bank_AcNo'] != $obj['Bank_AcNo_old'])都將是true,則兩個數據集將被添加到表client_details_log

如果if語句if($obj['field_name']='Bank account number')false,變量$old$new將不會被更新,使得相同的數據將被添加到表的兩倍。

也許你移動你的SQL查詢您的if($obj['field_name'] == ...)語句中:

if($obj['field_name'] == 'Bank Name') 
{ 
    $old=$obj['Bank_Name_old'];  
    $new=$obj['Bank_Name']; 

    $query="insert into vns_db.dbo.client_details_log (company_code,client_id,field_name,original_value,new_value) values ('".$obj['company_code']."', '".$obj['Account_Code']."','".$obj['field_name']."','$old','$new')"; 

    $res = sqlsrv_query($conn,$query); 
} 
-1

有可能會造成一個問題,你的代碼的一個或兩件事情。首先,Devanshu說你可以複製(見下面我的建議)。其次你的if語句是分配(=)而不是比較(==)。第三,你應該嘗試使用函數而不是重複代碼,這會使調試變得困難。

嘗試是這樣的:

function addData() 
{ 
    $query = "insert into vns_db.dbo.client_details_log (company_code,client_id,field_name,original_value,new_value) values ('".$obj['company_code']."', 
      '".$obj['Account_Code']."','".$obj['field_name']."','".$old."','".$new."')";  
    return sqlsrv_query($conn,$query); 
} 

while ($obj = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC )) 
{ 

    if (($obj['Bank_Name']!= $obj['Bank_Name_old']) || ($obj['Bank_AcNo'] != $obj['Bank_AcNo_old'])) 
    {  
     $obj['company_code']; 
     $obj['Account_Code']; 
     $obj['Bank_Name']; 
     $obj['Bank_Name_old']; 
     $obj['field_name']='Bank Name'; 

     if ($obj['field_name']=='Bank Name') 
     { 
      $old=$obj['Bank_Name_old'];  
      $new=$obj['Bank_Name']; 
     } 

     if ($obj['field_name']=='Bank account number') 
     { 
      $old=$obj['Bank_AcNo_old']; 
      $new=$obj['Bank_AcNo'];   
     }  

     $res = addData(); 
    } 

} 
+0

您的「解決方案」仍然包含無關代碼邏輯錯誤。它根本無法工作。 –

+0

謝謝傑拉爾德,它只是一個指導以及我的評論。 – JorgeJ