#sql #yii
#sql #yii
Вопрос:
У меня есть некоторая команда sql в контроллере yii
моя команда запроса верна, но когда я хочу ее выполнить, у меня возникает исключение CDbException.
Я оставил свой код здесь, я не знаю, как его решить.
Я думаю, что когда я выполняю какую-либо команду запроса, я получаю ошибку, потому что, когда я выполняю команду запроса, у меня нет никаких проблем.
$queryb = "DROP TABLE if exists poli;";
$queryb .= "CREATE VIEW poli AS
SELECT `user_Id` , count( `psh_profile_information_services`.id ) as internetcount
FROM `psh_profile_information`
INNER JOIN `psh_profile_information_services` ON `psh_profile_information`.`id` = `psh_profile_information_services`.`profileInformationId`
WHERE `serviceId` =1
GROUP BY `psh_profile_information`.`user_Id` ";
$command= $connection->createCommand($queryb);
$command->execute();
$sql = "SELECT `profile`.`scope_id` , SUM( internetcount )
FROM `psh_profiles` AS profile
INNER JOIN `poli` ON `profile`.`user_id` = `poli`.`user_Id`
GROUP BY `profile`.`scope_id` ";
$internetcountOfRows = Yii::app()->db->createCommand($sql)->queryAll();
этот код может создать «view pori», но не может выполнить запрос «$ sql».
CDbException:
General error: 2014 Cannot execute queries while other unbuffered queries are active.
Consider using PDOStatement::fetchAll().
Alternatively, if your code is only ever going to run against mysql,
you may enable query buffering by setting the PDO::MYSQL_ATTR_USE_BUFFERED_QUERY attribute.. The SQL statement executed was: SELECT `profile`.`scope_id` , SUM( internetcount )
FROM `psh_profiles` AS profile
INNER JOIN `poli` ON `profile`.`user_id` = `poli`.`user_Id`
GROUP BY `profile`.`scope_id`
Ответ №1:
Попробуйте добавить это перед выполнением:
$command->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, true);
Комментарии:
1. я пишу вашу команду перед $command-> execute(); у меня ошибка: CDbCommand и его поведение не имеют метода или замыкания с именем «setAttribute».
2. попробуйте:
Yii::app()->db->->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, true);