Rumah >pembangunan bahagian belakang >tutorial php >php mysql insert into while 意外终止
$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>";}}
PS:处理的数据是中文,有19万条数据,大约11M,服务器用的apache,是不是服务器负担重才终止的?
。。
像你这种问题,肯定是要在cli模式下跑单条sql处理才靠谱啊!!!
至不济也要先把数据导出,然后导入,而不是这样做啊
参见select into
我能说是分批/次处理
详解请看楼下说法……
#2楼说的写入文件再读取,我刚刚试过了,还是不行,insert 1K条后会同样不知原因地终止掉了。
看这处理能力(1000条左右)我如果要分批处理的话(#3楼说的方法)那要分多少次啊?我有20W条的记录啊。。
你就不会写成单条insert么
1k条insert当然会拖累mysql啊
单条insert插入多个数据会吧
用存储过程试试会不会好些
有几个问题需要注意排除:
1、php超时
2、web服务器超时
3、特殊字符未转义
4、count($array)
算法上可考虑:
每千条组装成多个VALUE的INSERT语句后插入
以分页方式逐段插入
直接使用SQL指令完成,而不经php转手
$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;
你就不会写成单条insert么
1k条insert当然会拖累mysql啊
单条insert插入多个数据会吧
insert ..values(),(),()... 是这样的吗?
用存储过程试试会不会好些
存储过程是什么意思?还没学习过。
有几个问题需要注意排除:
1、php超时
2、web服务器超时
3、特殊字符未转义
4、count($array)
算法上可考虑:
每千条组装成多个VALUE的INSERT语句后插入
以分页方式逐段插入
直接使用SQL指令完成,而不经php转手
$sql = INSERT INTO upcn(uid,pid,cate1,cate2,cate3,c……
这位是大神呐!太强了!这个方法很管用,9.15S就处理完了。
有几个问题需要注意排除:
1、php超时
2、web服务器超时
3、特殊字符未转义
4、count($array)
算法上可考虑:
每千条组装成多个VALUE的INSERT语句后插入
以分页方式逐段插入
直接使用SQL指令完成,而不经php转手
$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;
请问大神,这个直接使用SQL指令完成,而不经php转手是什么意思?
是不是利用PHP建立一个SQL文件,然后让sql执行?
我也遇到同样问题,还没解决...烦恼中...