2014-02-09 72 views
2

我正在编写一个需要连接mysql的php程序。 所以我尝试使用mysqli。但是标题中提到了一个问题。 对于细节是这样的:

<?php 
.... 
     $mysqli = new mysqli(HOST,USER,PASSWORD,DATABASE); 
     if(mysqli_connect_errno()){ 
      printf("Connect failed: %s\n", mysqli_connect_error()); 
      exit(); 
     } 
     $sql = "update dsagencyinfo set Company='a', Region='b', AgencyName='c', HeadAgencyCode='71u269', AgencyFlag='4850G', AgencyStarts='dd', AgencyAttr='e', AgencyType='test', AgencyAddr='f1', AgencyPhoto='ss', HouseAttr='f', HouseArea='60', DecorationDate='41183', CounterNumber='6', CounterNumberLT='2', CounterNumberYD='5', OperatorName='dd', OperatorTel='18607277068', ClerkNumber='1', AdminName='ff', AdminTel='1860727123', CreateTime=now() where AgencyCode=36578689 "; 
     if($mysqli->query($sql)){ 
      if($mysqli->affected_rows == 1){ 
       return true; 
      }else{ 
       return false; 
      } 

     } 
?> 

但后来我发现,$mysqli->affected_rows返回-1,也就是说,应该有这个SQL做错事,所以我得到的$mysqli->errno价值,但它返回0表示没有错误发生!而且,$mysqli->error也返回“”。 然后我输入这个sql到mysql(我使用phpmyadmin),执行它,mysql说它没问题,我检查数据库中的数据确实是更新的。 我不明白为什么$mysqli->affected_rows返回-1,我该如何解决这个问题?

我的PHP版本5.4.12是MySQL的 版本:5.6.12

+2

你在哪里输出affected_rows,以便你知道它是-1?我只看到检查结果是否为1,我认为这里有一些背景缺失。 – Zarathuztra

+0

这是我的code.I调试它在IDE – CoolGuy

回答

1

看来,对象$ mysqli的没有进入条件之前得到结果。尝试:

if($mysqli = $mysqli->query($sql)){ 
     if($mysqli->affected_rows == 1){ 
      return true; 
     }else{ 
      return false; 
     } 
} 

或者从$ mysqli-> query()条件中获取它。

$mysqli->query($sql); 
if($mysqli->affected_rows == 1){ 
    return true; 
} else { 
    return false; 
} 
+0

嗯,谢谢你,虽然你没有解决我的问题,但你给我一个重要的想法。这不是因为$ mysqli->查询,而是$ mysqli-> > affected_rows。我修改了这样的代码解决了我的问题(我仍然不清楚为什么会发生这种情况):if($ mysqli-> query($ sql)){row = $ mysqli-> affected_rows;如果($ row == 1){// $ mysqli-> affected_rows here仍然返回-1 return true; } else { return false; } } – CoolGuy

+0

您是否尝试在$ mysqli-> query()条件之外执行$ mysqli-> affected_rows? – EdCapetti

+2

等待,'$ mysqli = $ mysqli-> query($ sql)'=>用boolean覆盖mysqli对象?你为什么要这样? – Wrikken

相关问题