fetchВсе застрял - PullRequest
       21

fetchВсе застрял

0 голосов
/ 25 августа 2011

У меня есть следующий код:

    $sql = "SELECT table.field, table2.field2 FROM
                table, table2";
    $stmt = $this->db->prepare($sql);
    $stmt->execute();

    $x = $stmt->fetchAll(PDO::FETCH_ASSOC);

Я знаю, что информации недостаточно, но я не понимаю, почему код выполняется, только если я комментирую строку fetchAll.Когда эта строка выполняется, я ничего не получаю, только пустой браузер, никаких ошибок или чего-то еще.В firebug ответ пустой ... Что это может быть ??

Ответы [ 2 ]

6 голосов
/ 25 августа 2011

Вы делаете декартово произведение из table и table2.Это может быть ОГРОМНОЕ количество данных.

Для каждой строки в таблице вы получаете все строки в table2.Так что, если table имеет 100 строк, а table2 имеет 500 строк, ваш запрос попытается получить 50 000 строк.

Вам также понадобится JOIN:

SELECT table.field, table2.field2 
FROM table 
JOIN table2 
ON table.field3 = table2.field3

Или СОЮЗ

SELECT table.field AS FIELDNAME FROM table
UNION ALL
SELECT table2.field2 AS FIELDNAME FROM table2

Если декартово произведение действительно то, что вам нужно, попробуйте добавить LIMIT и посмотрите, работает ли это.Позже увеличьте или уберите ограничение

SELECT table.field, table2.field2 
FROM table, table2 LIMIT 10

В зависимости от того, что содержат ваши таблицы (вы действительно не предоставили достаточно информации).

0 голосов
/ 25 августа 2011

Для отлова ошибок вы должны включить error_reporting и display_errors.Я думаю, что причиной такого поведения является то, что вы получаете «допустимый предел памяти».Может быть, вы получите слишком много строк из БД.

Попробуйте добавить ini_set ('memory_limit', '256M') и проверьте работоспособность.

...