1 错误由来
php操作三张表,一张表有近四十万条记录,另外两张表记录数在三万左右,三张表又关联。应用左连接left join。
$qLStr = "select pu.pd_no, pu.common_name, pu.purchase_cost, pu.medication_area, pu.total_dosage, pu.control_object, pu.use_cost, "
."pu.farmer_id, pr.pesticide_type, pr.toxicity, pr.content_num, pr.class_type, "
."pf.farmer_type "
." from pesticide_usedetail as pu "
." left join pesticide_register as pr on pu.pd_no=pr.regist_no "
." left join pesticide_farmers as pf on pu.farmer_id=pf.id "
." where pu.dateyear=2022 and pu.crop_id=3"
." order by pu.farmer_id";
但运行数秒后,页面即显示为空白。不显示记录,也不显示记录数量。
加error_reporting(-1);
也无错误显示。
2 原因查找
通过myadmin可以正确运行查询,记录数约在9万左右,换另一种crop_id,记录数3万多可由php操作查询语句正确运行。
修改sql语句字段数,减少到8个字段可开始查询,以为是left join语句的效率问题,字段pd_no等连接字段加上索引,但问题依旧。
原php语句是在mysql封装类中操作,直接跳过类,连接数据库后,查询记录数可显示。但在进行
while($row = $rowLArr->fetch_assoc()){
$rows[] = $row;
}
操作时,提示
Fatal error: Allowed memory size of ***bytes exhausted错误
3 解决方法
查看php.ini文件
memory_limit = 128M
起先原以为这个够了,实际在数据量较大时就出问题。
修改为memory_limit = 256M
ok