$result = mysql_query("SELECT uid , pid , cate
                       FROM upcm");
while($rows = mysql_fetch_row($result))
{
$arry = explode($sepr,$rows[2],5);
$query = "INSERT INTO upcn(uid,pid,cate1,cate2,cate3,cate4,cate5)
           VALUES('$rows[0]','$rows[1]','$arry[0]','$arry[1]','$arry[2]','$arry[3]','$arry[4]')";
$result1 = mysql_query($query);
if(!$result1)
{
echo "fail<br>";
}
}mysql_fetch_row($result)获取查询的结果,逐条处理,处理后写进一个新的表里面,但是每次执行while循环总是还没执行完程序就终止了,没有处理完数据,把insert into 换成printf(“**”);代替插入操作,会将程序正确执行完毕,而且每次运行程序插入的条数不一,有时多有时少,请问大侠们什么情况这是,苦恼啊..

解决方案 »

  1.   

    PS:处理的数据是中文,有19万条数据,大约11M,服务器用的apache,是不是服务器负担重才终止的?
      

  2.   

    。。
    像你这种问题,肯定是要在cli模式下跑单条sql处理才靠谱啊!!!
    至不济也要先把数据导出,然后导入,而不是这样做啊
    参见select into
      

  3.   

    #2楼说的写入文件再读取,我刚刚试过了,还是不行,insert 1K条后会同样不知原因地终止掉了。
    看这处理能力(1000条左右)我如果要分批处理的话(#3楼说的方法)那要分多少次啊?我有20W条的记录啊。。
      

  4.   

    你就不会写成单条insert么
    1k条insert当然会拖累mysql啊
    单条insert插入多个数据会吧
      

  5.   

    有几个问题需要注意排除:
    1、php超时
    2、web服务器超时
    3、特殊字符未转义
    4、count($array) < 5算法上可考虑:
    每千条组装成多个VALUE的INSERT语句后插入
    以分页方式逐段插入直接使用SQL指令完成,而不经php转手
    $sql =<<< SQL
    INSERT INTO upcn(uid,pid,cate1,cate2,cate3,cate4,cate5)
      SELECT uid , pid 
        , substring_index(substring_index(cate,'$sepr',1),'$sepr',-1)
        , substring_index(substring_index(cate,'$sepr',2),'$sepr',-1)
        , substring_index(substring_index(cate,'$sepr',3),'$sepr',-1)
        , substring_index(substring_index(cate,'$sepr',4),'$sepr',-1)
        , substring_index(substring_index(cate,'$sepr',5),'$sepr',-1)
        FROM upcm
    SQL;
      

  6.   

    insert ..values(),(),()...  是这样的吗?
      

  7.   


    请问大神,这个直接使用SQL指令完成,而不经php转手是什么意思?
    是不是利用PHP建立一个SQL文件,然后让sql执行?我也遇到同样问题,还没解决...烦恼中...