2012-02-18 122 views
0

为了从数据库中获取的结果,你可以这样做:fetchAll的要点是什么?

$sth = $dbh->prepare("SELECT name, colour FROM fruit"); 
$sth->execute(); 
$result = $sth->fetchAll(); 
foreach($result as $r) { 
    echo "<pre>"; 
    print_r($r); 
    echo "</pre>"; 
} 

,但它似乎没有使用fetchAll工作,例如:

$sth = $dbh->prepare("SELECT name, colour FROM fruit"); 
$result = $sth->execute(); 
foreach($result as $r) { 
    echo "<pre>"; 
    print_r($r); 
    echo "</pre>"; 
} 

这样的区别是什么?

+1

这很奇怪,因为执行返回TRUE或FALSE。 http://www.php.net/manual/en/pdostatement.execute.php – malletjo 2012-02-18 01:58:38

+0

其实@racar – 2012-02-18 02:07:31

回答

3

fetchAll将从数据库结果集的所有行中读取数组,并将它们全部保存在内存中。迭代结果集将一次从服务器获取一行,这将节省PHP端资源(但可能会在数据库服务器上使用更多资源,具体取决于数据库实现)。

1

首先,我假设你正在使用PHP PDO

随着使用fetchall可以指定提取模式作为参数,并使用fetchall返回的行提供了更大的灵活性和使用fetchall将从数据库中读取所有行,并转化成一个阵列。

fetchall比我简单的执行资源管理更有效率。执行返回的资源也是bool