Я хочу использовать 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);
}
Будет ли результат после каждой выборки из базы данных сохраняться в памяти?
То есть, когда я делаю вторую выборку, память будет иметь данные первой выборки, а также данные для второй выборки.
И так, если у меня 90000 строк данных и каждый раз выполняется выборка, то память обновляется, чтобы получить новый результат выборки, не удаляя результаты из предыдущей выборки, и поэтому для памяти последней выборки уже будет 89999 строк данных.
- Это как
PDOStatement::fetch
работает?
- Производительность мудро, как этот стек
против
PDOStatement::fetchAll
?
Обновление: кое-что о fetch и fetchAll с точки зрения использования памяти
Просто хотел добавить кое-что к этому вопросу, так как недавно нашел что-то, касающееся fetch и fetch. Все, надеюсь, это сделает этот вопрос полезным, чтобы люди могли посетить этот вопрос в будущем, чтобы получить некоторое представление о параметрах fetch и fetchAll.
fetch не хранит информацию в памяти и работает от строки к строке, поэтому он проходит через набор результатов и возвращает строку 1, затем снова возвращается к набору результатов и затем снова возвращает строку 2, помня, что она не вернет строку 1, а также 2, но вернет только строку 2, поэтому fetch не сохранит ничего в памяти, но fetchAll сохранит детали в памяти. Так что fetch - лучший вариант по сравнению с fetchAll, если мы имеем дело с результирующим набором размером около 100K.