如何解决

最近在开发一个

错误信息显示允许的最大内存已经耗尽。遇到这样的错误起初让我很诧异,但转眼一想,也不奇怪,因为我正在开发的这个程序是要用一个foreach循环语句在一个有4万条记录的表里全表搜索具有特定特征的数据,也就是说,一次要把4万条数据取出,然后逐条检查每天数据。可想而知,4万条数据全部加载到内存中,内存不爆才怪。

毕竟编程这么多年,我隐约记得

这个问题在

相对的,另外一种

很显然,缓冲查询模式适用于小数据量查询,而非缓冲查询适应于大数据量查询。

对于

非缓冲查询方法一: mysqli

  1. $mysqli = new mysqli("localhost", "my_user", "my_password", "world");
  2. $uresult = $mysqli->query("SELECT Name FROM City", MYSQLI_USE_RESULT);
  3. if ($uresult) {
  4. while ($row = $uresult->fetch_assoc()) {
  5. echo $row['Name'] .
  6. }
  7. }
  8. $uresult->close();
  9. ?>
登录后复制

非缓冲查询方法二: pdo_mysql

  1. $pdo = new PDO("mysql:host=localhost;dbname=world", 'my_user', 'my_pass');
  2. $pdo->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, false);
  3. $uresult = $pdo->query("SELECT Name FROM City");
  4. if ($uresult) {
  5. while ($row = $uresult->fetch(PDO::FETCH_ASSOC)) {
  6. echo $row['Name'] .
  7. }
  8. }
  9. ?>
登录后复制

非缓冲查询方法三: mysql

  1. $conn = mysql_connect("localhost", "my_user", "my_pass");
  2. $db = mysql_select_db("world");
  3. $uresult = mysql_unbuffered_query("SELECT Name FROM City");
  4. if ($uresult) {
  5. while ($row = mysql_fetch_assoc($uresult)) {
  6. echo $row['Name'] .
  7. }
  8. }
  9. ?>
登录后复制


09-18 04:18