问题描述:需要更新的数据($value)有2000多条,循环赋值.总是循环到1400条左右就自己停了不再继续,找了很久没找到原因,请坛里大神们帮帮忙!
ps:已经更新的前1400条左右的数据更新正常,sql语句也是OK的.
$dbh->beginTransaction();
$i=0;
while($value = $query->fetch(PDO::FETCH_ASSOC)){
$value = eval('return '.iconv('UTF-8','gbk',var_export($value,true)).';');
$sql = 'update v9_cars set Car_Type = (select id from clcp_cars_type where type_name = "'.$value['a1'].'" limit 1) , car_pp = (select id from clcp_cars_pp where pp_name = "'.$value['a2'].'" limit 1) , car_qy = (select id from clcp_cars_qy where company_name = "'.$value['a2'].'" limit 1), title=Car_xh ,keywords=Car_xh '.($value['a3']?',chassis_pp=(select chassis_pp from v9_chassis as a left join v9_chassis_data as b on a.id=b.id where b.DPID = "'.$value['a3'].'" limit 1),chassis_qy=(select chassis_qy from v9_chassis as a left join v9_chassis_data as b on a.id=b.id where b.DPID = "'.$value['a3'].'" limit 1)':'').' where Car_xh = "'.$value['a4'].'"';
$dbh->exec($sql);
if($i>=1000 && $i%1000==0){
$dbh->commit();
}
echo $i.',';
$i++;
//break;
}
$dbh->commit();

解决方案 »

  1.   

    把所有SQL语句先输出看一下,估计还是语句本身有问题。$sql = 'update v9_cars set Car_Type = (se...
    echo $sql
            $dbh->exec($sql);
      

  2.   

    语句输出没问题,都看了的.这也从前1000条更新数据看得出来.目的,就是把其它几个表的有关数据更新到v9_cars这个表来.$sql = 'update v9_cars set Car_Type = (select id from clcp_cars_type where type_name = "'.$value['a1'].'" limit 1) , car_pp = (select id from clcp_cars_pp where pp_name = "'.$value['a2'].'" limit 1) , car_qy = (select id from clcp_cars_qy where company_name = "'.$value['a2'].'" limit 1), title=Car_xh ,keywords=Car_xh '.($value['a3']?',chassis_pp=(select chassis_pp from v9_chassis as a left join v9_chassis_data as b on a.id=b.id where b.DPID = "'.$value['a3'].'" limit 1),chassis_qy=(select chassis_qy from v9_chassis as a left join v9_chassis_data as b on a.id=b.id where b.DPID = "'.$value['a3'].'" limit 1)':'').' where Car_xh = "'.$value['a4'].'"';我觉得不是sql语句本身的问题,好像这个update次数有限制.循环1000多次update就挂了.
      

  3.   

    什么错误提示都没有,就是循环1000多次后自己停了.是要优化sql语句本身,还是有其它什么方法让循环不停下来?
      

  4.   

    我把sql语句改了一下:
    $sql = 'update v9_cars set Car_Type = 1 , car_pp = 2 , car_qy = 3, title=Car_xh ,keywords=Car_xh '.($value['a3']?',chassis_pp=4,chassis_qy=5':'').' where Car_xh = "'.$value['a4'].'"';这种简单的sql语句也会在循环1500条左右时停下来了.没报错.什么问题?