php не может проверить, является ли результат PDO пустым, используя empty() возвращает FATAL ERROR

Я хочу проверить, вернулся ли мой подготовленный запрос пустым или нет, без необходимости зацикливаться. Это код, который я пытался использовать:

if(empty($pQuery1->fetch(PDO::FETCH_ASSOC))){}

Когда я пытаюсь это сделать, я получаю сообщение об ошибке:

Fatal error: Can't use method return value in write context

Независимо от того, использую ли я PDO->fetchALL или PDO->fetch, я получаю ту же ошибку. Должен ли я делать что-то по-другому?


person Brook Julias    schedule 20.05.2012    source источник


Ответы (1)


Вам нужно присвоить результаты переменной, а затем вызвать empty() для этой переменной. Это просто раздражающее ограничение функции empty(). См. этот вопрос.

$results = $pQuery1->fetch(PDO::FETCH_ASSOC);
if (empty($results)){}
person James Skidmore    schedule 20.05.2012
comment
Я хотел бы отметить, что вы могли бы просто сделать if (!$results) {}, так как он ведет себя идентично. - person goat; 21.05.2012
comment
@chris if(empty($foo)) не будет генерировать предупреждение, если параметр не установлен. if(!$foo) выдаст предупреждение, если параметр не установлен. php.net/manual/en/function.empty.php - person Jake; 21.05.2012
comment
он был установлен в предыдущей строке :) - person goat; 21.05.2012
comment
@chris - использование $results таким образом терпит неудачу, только если результат возвращает false. Можно получить пустой результат, не будучи ложным. - person Brook Julias; 21.05.2012
comment
Это довольно раздражающее ограничение. Я волнуюсь, когда, если это будет исправлено. - person Brook Julias; 21.05.2012
comment
@BrookJulias, ! оператор преобразует свой операнд в логическое значение, а пустой массив преобразует в логическое значение false. ! оператор и empty() на 100% логически эквивалентны. - person goat; 21.05.2012
comment
@Chris - должно быть, я испортил некоторые тесты. - person Brook Julias; 21.05.2012