簡體   English   中英

PHP PDO如何在內部工作?

[英]How does PHP PDO work internally?

我想在我的應用程序中使用pdo,但在此之前我想了解內部PDOStatement->fetchPDOStatement->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);
}

每次從數據庫中獲取后,該獲取的結果是否會存儲在內存中?

當我進行第二次獲取時,內存將具有第一次獲取的數據以及第二次獲取的數據。

因此,如果我有90000行數據,並且如果每次都進行提取而不是更新內存以獲取新的提取結果而不刪除先前提取的結果,那么對於最后一次獲取內存將具有89999行數據。

  1. 這是PDOStatement::fetch工作原理嗎?
  2. 性能方面如何與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導出操作,請考慮。 很多人。

我建議你使用PDO::FETCH_LAZY代替PDO::FETCH_ASSOC來處理大數據。 我用它逐行導出到csv,它工作正常。 沒有任何“內存不足”的錯誤。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM