2016-01-21 46 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