Yii - создать временную таблицу и использовать ее в следующем запросе приводит к общей ошибке: 2014 Не удается выполнить запросы, когда другие небуферизованные запросы активны - PullRequest
2 голосов
/ 28 июля 2011

Я создаю временную таблицу для хранения некоторых дат в первом запросе. И во втором запросе я пытаюсь присоединиться к этим датам ... и затем я получаю следующую ошибку:

SQLSTATE [HY000]: общая ошибка: 2014. Невозможно выполнить запросы, когда другие небуферизованные запросы активны. Рассмотрите возможность использования PDOStatement :: fetchAll (). В качестве альтернативы, если ваш код работает только с mysql, вы можете включить буферизацию запросов, установив атрибут PDO :: MYSQL_ATTR_USE_BUFFERED_QUERY ..

Первый запрос:

    $query = "DROP TABLE if exists TempDatesTable;";
    $query .= "CREATE TEMPORARY TABLE TempDatesTable ( days char(20) ) TYPE=HEAP  DEFAULT CHARSET=utf8;";

    foreach ($allDatesInsideInterval as $date) {
        $query .= "INSERT INTO TempDatesTable VALUES( '$date' );";
    }

    Yii::app()->db->createCommand($query)->execute();

Второй запрос

$command = Yii::app()->db->createCommand()
                    ->select('allDays.days as periodDay, numberOfSentRequests, numberOfReceivedRequests, numOfLogins, numOfProfilesViewed')
                    ->from("(" . $commandDates->getText() . ") allDays")
                    ->leftJoin("(" . $commandProfileViewed->getText() . ") accessLog", 'allDays.days = accessLog.days')....

Когда я пытаюсь запустить второй запрос:

return new CSqlDataProvider($command->getText(), array(
        'totalItemCount' => count($allDatesInsideInterval),
        'pagination' => array(
            'pageSize' => self::PAGE_SIZE
        ),
        ...

Я видел, что мне нужно сделать fetchAll (); и closeCursor (); ... но как это сделать в Yii? Есть идеи?

Ответы [ 2 ]

1 голос
/ 17 октября 2011

Я получаю ту же ошибку, когда у меня есть ";" в запросе

Попробуйте изменить первый запрос

$query = "DROP TABLE if exists TempDatesTable;";
$query .= "CREATE TEMPORARY TABLE TempDatesTable ( days char(20) ) TYPE=HEAP  DEFAULT CHARSET=utf8";

foreach ($allDatesInsideInterval as $date) {
    $query .= "; INSERT INTO TempDatesTable VALUES( '$date' )";
}
1 голос
/ 29 июля 2011

После того, как вы выполните и / или получите данные для запроса, попробуйте:

$command = false;

см .: http://www.yiiframework.com/doc/guide/1.1/en/database.dao

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...