我想在我的应用程序中使用pdo,但在此之前我想了解内部PDOStatement->fetch和内部
PDOStatement->fetchAll.
对于我的应用程序,我想做类似"SELECT*FROM myTable"的操作并插入到csv文件中,它有大约90000行数据.
我的问题是,如果我使用PDOStatement->fetch它,因为我在这里使用它:
// First, prepare the statement, using placeholders
$query = "SELECT * FROM tableName";
$stmt = $this->connection->prepare($query);
// Execute the statement
$stmt->execute();
var_dump($stmt->fetch(PDO::FETCH_ASSOC));
while ($row = $stmt->fetch(PDO::FETCH_ASSOC))
{
echo "Hi";
// Export every row to a file
fputcsv($data, $row);
}
Run Code Online (Sandbox Code Playgroud)
每次从数据库中获取后,该获取的结果是否会存储在内存中?
当我进行第二次获取时,内存将具有第一次获取的数据以及第二次获取的数据.
因此,如果我有90000行数据,并且如果每次都进行提取而不是更新内存以获取新的提取结果而不删除先前提取的结果,那么对于最后一次提取内存将已经有89999行数据.
PDOStatement::fetch
有效吗?PDOStatement::fetchAll?更新:从内存使用的角度来看有关fetch和fetchAll的内容
只是想在这个问题上添加一些东西,因为最近发现了一些关于fetch和fetchAll的东西,希望这会使这个问题值得人们将来访问这个问题以获得对fetch和fetchAll参数的一些理解.
fetch不会在内存中存储信息并且它在行到行的基础上工作,因此它将通过结果集并返回第1行,而不是再次返回到结果集,而不是再次返回第2行,它将不会返回第1行和第2行但只返回第2行,因此fetch不会将任何内容存储到内存中,但fetchAll会将详细信息存储到内存中.因此,如果我们处理大小约为100K的结果集,那么fetch与fetchAll相比是更好的选择.
PHP 通常将其结果保存在服务器上。这一切都取决于司机。MySQL 可以在“无缓冲”模式下使用,但使用起来有点棘手。fetchAll()在大型结果集上可能会导致网络泛洪、内存耗尽等。
在每次需要处理超过 1,000 行的情况下,我都不会使用 PHP。另请考虑您的数据库引擎是否已有 CSV 导出操作。很多人都这样做。
| 归档时间: |
|
| 查看次数: |
1584 次 |
| 最近记录: |