要更新fafang表和shebei表,先查找fafang表所有数据,用while循环每次读出一条记录,然后根据字段判断是否更新,若更新,则更新fafang表之后,用sbid查找shebei表,再对shebei表进行更新。但不知为何,执行之后,只能更新fafang表中一条记录和shebei表中一条记录。如果需要更新的记录有3条,则需要执行3次。问题出在哪里?$res=mysql_query("select * from fafang order by ffriqi");
while($row=mysql_fetch_array($res)){
    $jintian=date('Y-m-d',time());
        $ffid=$row['ffid'];
$sbid=$row['sbid'];
$ffriqi=$row['ffriqi'];
$ffzhuangtai=$row['ffzhuangtai'];
$guihuanriqi=$row['guihuanriqi'];
//当前时间早于发放日期,则发放状态为“待发放”
if(strtotime($jintian) < strtotime($ffriqi) && $ffzhuangtai != '待发放'){
mysql_query("update fafang set ffzhuangtai='待发放' where ffid='$ffid'");
}
//当前时间处于发放日期与归还日期之间
if(strtotime($jintian) >= strtotime($ffriqi) && strtotime($jintian) <= strtotime($guihuanriqi) && $ffzhuangtai != '外借中'  && $ffzhuangtai != '维修'){
mysql_query("update fafang set ffzhuangtai='外借中' where ffid='$ffid'");
//更新设备表
$res=mysql_query("select cunfangfangshi from shebei where sbid='$sbid' ");
$cunfangfangshi=mysql_result($res,0,0);
if($cunfangfangshi=="固定"){
$rs=mysql_query("update shebei set sbzhuangtai='不可用' where sbid='$sbid' ");
}
if($cunfangfangshi=="可移动"){
$rs=mysql_query("update shebei set sbzhuangtai='外借' where sbid='$sbid' ");
}
}
//当前日期晚于归还日期,则发放状态为“已归还”
if(strtotime($jintian) > strtotime($guihuanriqi) && $ffzhuangtai != '已归还'){
mysql_query("update fafang set ffzhuangtai='已归还' where ffid='$ffid'");
//var_dump("update fafang set ffzhuangtai='已归还' where ffid='$ffid'");
//更新设备表
$res=mysql_query("select cunfangfangshi from shebei where sbid='$sbid' ");
$cunfangfangshi=mysql_result($res,0,0);
if($cunfangfangshi=="固定"){
$rs=mysql_query("update shebei set sbzhuangtai='可用' where sbid='$sbid' ");
}
if($cunfangfangshi=="可移动"){
$rs=mysql_query("update shebei set sbzhuangtai='在库' where sbid='$sbid' ");
}
}
}

解决方案 »

  1.   

    $times=1;
    while($row=mysql_fetch_array($res)){
    echo "循环次数为第".$times."次";
    结果要看对第几条记录进行更新,如果是对第1条记录进行更新,则是循环1次,如果对第3条记录进行更新,则循环3次。也就是说,执行了更新操作,就会退出循环。
      

  2.   

    循环体前面的$res=mysql_query("select * from fafang order by ffriqi");会返回一条mysql连接,在循环体里面执行数据库操作语句,会产生新的mysql连接,并把之前的连接覆盖掉,从而使$row=mysql_fetch_array($res)中的返回为空。建议先用一个数组把所有查询结果存起来,再对数组中每一条进行操作
      

  3.   

    你的 17、31 行处修改了 循环的控制量 $res
    怎么会犯这种低级错误呢?
      

  4.   

    第1,2行
    $res=mysql_query("select * from fafang order by ffriqi");
    while($row=mysql_fetch_array($res)){第17行
    $res=mysql_query("select cunfangfangshi from shebei where sbid='$sbid' ");第31行
    $res=mysql_query("select cunfangfangshi from shebei where sbid='$sbid' ");在while循环体内,你修改了作为while条件判断的$res变量,导致循环不对。
    修改方法,可以把17,31行的$res变量名修改为其他名字。