Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在PHP中,我应该将WHILE与mysql结果或数组一起使用吗?_Php_Mysql - Fatal编程技术网

在PHP中,我应该将WHILE与mysql结果或数组一起使用吗?

在PHP中,我应该将WHILE与mysql结果或数组一起使用吗?,php,mysql,Php,Mysql,下面是php/mysql中两个代码的模型。 第一个返回mysql结果并运行while循环来迭代结果,第二个执行几乎相同的操作,但将结果放入查询中,然后将其放入屏幕。现在,对于一种更面向对象的方法,我认为第二种方法会更好(我不确定,我正在学习),但是我感到困惑的是,使用下面的第二种方法不会占用两倍的内存吗?它不是基本上创建了2个数组而不是1个吗 将其放入阵列似乎更加灵活,请给我您的提示/建议。请记住,在一个页面上运行1次也不是一件简单的事情,在我的网站上的一个页面上,一个真实的例子是数组中可能包含

下面是php/mysql中两个代码的模型。
第一个返回mysql结果并运行while循环来迭代结果,第二个执行几乎相同的操作,但将结果放入查询中,然后将其放入屏幕。现在,对于一种更面向对象的方法,我认为第二种方法会更好(我不确定,我正在学习),但是我感到困惑的是,使用下面的第二种方法不会占用两倍的内存吗?它不是基本上创建了2个数组而不是1个吗

将其放入阵列似乎更加灵活,请给我您的提示/建议。请记住,在一个页面上运行1次也不是一件简单的事情,在我的网站上的一个页面上,一个真实的例子是数组中可能包含5000个用户名和用户名,并且可能在同一页面上进行多个查询,所有查询都使用不同的数据

<?PHP
// first method without using array
$url = "http://www.google.com/";
$sql = "SELECT user_id, nickname FROM `".TABLE_USERS."`
          WHERE referrer LIKE '".$db->escape($url)."%'
          ORDER BY nickname DESC
          LIMIT 0,10";

$rows = $db->query($sql);

while ($record = $db->fetch_array($rows)) {
    echo "<tr><td>$record[user_id]</td>
          <td>$record[nickname]</td></tr>";
}
//////////////////////////////////////////////////////////////////////
//second method using array
$url = "http://www.google.com/";
$sql = "SELECT user_id, nickname FROM `".TABLE_USERS."`
          WHERE referer LIKE '".$db->escape($url)."%'
          ORDER BY nickname DESC
          LIMIT 0,10";

// feed it the sql directly. store all returned rows in an array
$rows = $db->fetch_all_array($sql);

// print out array later on when we need the info on the page
foreach($rows as $record){
    echo "<tr><td>$record[user_id]</td>
          <td>$record[nickname]</td></tr>";
}

?>

虽然
在我看来更好,因为它可以不将整个数据数组加载到内存中。

第一个选项速度更快,因为它需要更少的处理器计算。

第二个方法将使用两倍多的内存。第一种方法是一次只获取一行并将其发送到STDOUT。第二个方法将每一行读入一个数组。如果有5000行,它将使用大约5000倍的内存(不包括PHP的内部输出缓冲等)


第二种方法确实允许您更多地操作数据,但它肯定会占用更多的内存。如果你真的要处理一个页面上那么多的数据,如果你开始遇到资源问题,你可能必须找到方法来分解它。

这与OO无关。要成为OO,您需要在循环中填充一些对象。比如说:

$o = new MyObject();
$o->aField = $record['aField'];
$objects[] = $o;
但在本例中,您只是在打印页面,这两种方法只是传输这些数据的不同方式


第一种方法每次使用一个记录大小的数组。第二个使用一个数组,其大小为一条记录乘以记录数。既然你没有处理整个数组,那就用第一个吧。

我有点搞砸了,每个查询的页面上可能会有50个项目,但我想使用更多的内存,你可以很容易地得到50个结果,而且不必太担心内存。看起来您在查询中只提取了两个字段,一个ID和一个昵称,所以我们只讨论每个记录的几个字节的数据。MySQL还需要内存来存储结果集,但无论哪种情况,您都将使用内存,因此这对PHP方法没有影响。