Я попытался создать функцию экспорта CSV для своего веб-сайта. Я получил ошибку: «аргумент, переданный в _construct (), должен быть экземпляром PDOStatement». Ниже приведен код (php symfony 4) - посоветуйте, пожалуйста. Спасибо!
<?php
use Exporter\Handler;
use Exporter\Source\PDOStatementSourceIterator;
use Exporter\Writer\CsvWriter;
// Prepare the data source
$em=$this-getDoctrine()->getManager();
$sql = "select id, name from table";
$stm= $em->getConnection()->prepare($sql);
$stm->execute();
$source = new PDOStatementSourceIterator($stm);
// Prepare the writer
$writer = new CsvWriter('data.csv');
// Export the data
Handler::create($source, $writer)->export();
?>
Этот ответ может быть тем, что вы ищете, используя DoctrineORMQuerySourceIterator: Как экспортировать объект как CSV в Symfony?
Большое спасибо, Серад и Йош, за ваши быстрые ответы. Я попробовал предложение Cerad, добавив getWrappedConnection (), и проблема была решена. Я столкнулся с другой проблемой: «fopen (data.csv) не удалось открыть поток: отказано в разрешении».
Лучше придерживаться одной проблемы на вопрос. Но прежде чем задать новый вопрос, погуглите сообщение об ошибке. Множество возможных причин отказа fopen.






$ em-> getConnection фактически возвращает соединение уровня абстракции базы данных Doctrine. Не соединение pdo. Аналогично, prepare возвращает инструкцию DBAL. Отсюда несоответствие. Вам нужно перейти на один шаг ниже, чтобы установить соединение с pdo. $ stm = $ em-> getConnection () -> getWrappedConnection () -> подготовить ($ sql); Вы, вероятно, столкнетесь с другими проблемами, но это поможет вам пройти первый шаг.