Я хочу использовать pdo в своем приложении, но перед этим я хочу понять как внутренне PDOStatement->fetch
и PDOStatement->fetchAll
.
Для моего приложения я хочу сделать что-то как "ВЫБОР * ОТ myTable" и вставить в файл CSV, и это имеет приблизительно 90 000 строк данных.
Мой вопрос, если я использую 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);
}
Будет после каждой выборки из базы данных результатом для той выборки было бы хранилище в памяти?
Значение, когда я делаю вторую выборку, память, имело бы данные первой выборки, а также данные для второй выборки.
И поэтому если у меня есть 90 000 строк данных и если делаю выборку каждый раз, чем память обновляется для взятия нового результата выборки, не удаляя результаты предыдущей выборки и таким образом, для последней выборки память уже имела бы 89 999 строк данных.
PDOStatement::fetch
работы?PDOStatement::fetchAll
?Обновление: Что-то о выборке и fetchAll из памяти точка зрения использования
Просто требуемый к добавленному некоторая вещь к этому вопросу, как недавно найдено что-то относительно выборки и fetchAll, надейтесь, что это сделало бы этот вопрос стоящим для людей, посетит этот вопрос в будущем для получения некоторого понимания выборки и fetchAll параметров.
выборка не хранит информацию в памяти, и она работает над строкой для расположения в ряд основания, таким образом, она прошла бы набор результатов, и строка возврата 1, чем снова перейдет к набору результатов и, чем снова строка возврата 2 ума сюда, что она не возвратит строку 1, а также 2, но только возвратила бы строку 2, таким образом, выборка ничего не сохранит в память кроме fetchAll, сохранит детали в памяти. Таким образом, выборка является более оптимальным вариантом по сравнению с fetchAll, если мы имеем дело с результирующим набором приблизительно 100K в размере.
Обычно PHP сохраняет свои результаты на сервере. Все зависит от водителя. MySQL можно использовать в «небуферизованном» режиме, но использовать его немного сложно. fetchAll ()
для большого набора результатов может вызвать переполнение сети, исчерпание памяти и т. Д.
В каждом случае, когда мне нужно обработать более 1000 строк, я не использую PHP.Подумайте также, есть ли в вашем ядре базы данных уже операция экспорта в CSV. Многие так и делают.