За последние 24 часа нас посетили 19546 программистов и 1604 робота. Сейчас ищут 993 программиста ...

Как проверить что запрос вернул 0 записей, а не ошибку

Тема в разделе "PHP для новичков", создана пользователем sound, 26 май 2014.

  1. sound

    sound Guest

    Делаю запрос из PHP к базе Postgres

    Код (Text):
    1.  $res = pg_query_params($pgsql_conn, 'SELECT * FROM orders;');    
    2.  $rows = pg_num_rows($res);
    Иногда $rows равно нулю если записей нет, а иногда при проблеме на сервере $rows ничему не равно
    Но при проверке типо
    Код (Text):
    1. if($rows==""){}
    это тоже самое что и
    Код (Text):
    1. if($rows==0){}
    Как проверить что $rows пустая и не равно положительному числу или нулю ??

    Нужно как то детектить ошибку запроса, потому что если с запросом все ок, но он возвращает ноль записей эта ситуация обрабатываеться по другому.
     
  2. Ke1eth

    Ke1eth Активный пользователь

    С нами с:
    16 мар 2012
    Сообщения:
    1.073
    Симпатии:
    11
    Адрес:
    заблудилса
    Читаем мануал:
     
  3. sound

    sound Guest

    нет не возращает он -1

    к примеру делаю явную ошибку удаляю первую букву в запросе
    Код (Text):
    1. $res = pg_query_params($pgsql_conn, 'ELECT * FROM orders;');  
    2.  $rows = pg_num_rows($res);
    в итоге $rows ничему не равно, echo ничего не печатает, и $rows при проверке в условии равно 0
     
  4. dapperkop

    dapperkop Активный пользователь

    С нами с:
    26 сен 2013
    Сообщения:
    890
    Симпатии:
    0
    Код (PHP):
    1. $res = pg_query_params($pgsql_conn, 'ELECT * FROM orders;');
    2. if ($res === false) {
    3.     echo 'Тут у тебя ошибка 1';
    4. } else {
    5.     $rows = pg_num_rows($res);
    6.     if ($rows === -1) {
    7.         echo 'Тут у тебя ошибка 2';
    8.     } else {
    9.         echo 'Тут у тебя без ошибок';
    10.     }
    11. }
     
  5. sound

    sound Guest

    А что за ошибка может быть
    Код (Text):
    1.   if ($rows === -1) {
    2.         echo 'Тут у тебя ошибка 2';
    3.     }
    и что за тройное равно === ? это для постгрес что то ?
    в яндесе про === ничего не нашел
     
  6. dapperkop

    dapperkop Активный пользователь

    С нами с:
    26 сен 2013
    Сообщения:
    890
    Симпатии:
    0
    === это строгое сравнение. Если в доке пишется, что в случае ошибки возвращается -1, то ты должен строго сравнить возвращаемое значение с -1.
    Просто некоторые начинают сравнивать: if ($rows == "") или if ($rows == "-1"). Это неправильно.

    По написанному выше. Ошибка при выборе количества строк результата запроса. Другими словами, если ты попал в блок, где выводится "Тут у тебя без ошибок", то это значит, что $rows присвоено значение >= 0.
     
  7. mahmuzar

    mahmuzar Старожил

    С нами с:
    6 апр 2012
    Сообщения:
    4.631
    Симпатии:
    425
    Адрес:
    РД, г. Махачкала.
  8. sound

    sound Guest

    Код (Text):
    1. if ($rows === -1) {}
    то есть этот код эквивалентен если запрос возвращает ноль строк ?
    или это какая то ошибка ?

    просто я понять не могу если это ошибка то какая, если с запросом все ок, то есть $res !== false, строк может быть или больше нуля или равно нулю
     
  9. dapperkop

    dapperkop Активный пользователь

    С нами с:
    26 сен 2013
    Сообщения:
    890
    Симпатии:
    0
    ... Смотри... Ты когда делаешь запрос,
    Код (Text):
    1.  
    2. $res = pg_query_params($pgsql_conn, 'ELECT * FROM orders;');
    то ты должен получить ресурс #resource. Далее, с помощью фуцкций php, ты можешь из этого ресурса получить требуемые тебе данные. Если при выполнении запроса возникла ошибка, то переменная $res будет равна false...

    Далее ты пишешь:
    Код (PHP):
    1. $rows = pg_num_rows($res); 
    Эта строка кода вернуть тебе кроме -1 ничего не может, так как ты вставил в pg_num_rows значение false... А должен был вставить #resource.

    В итоге ты получаешь ошибку при выполнении запроса, не идентифицируешь ее...
    Далее ты получаешь ошибку при попытке выбрать количество возвращаемых значений, пытаешься ее идентифицировать, но так как ты не умеешь правильно идентифицировать ее присутствие - в итоге ничего не получаешь...

    Добавлено спустя 1 минуту 39 секунд:
    Она не может быть пустой, она обязательно будет равна от -1 и выше...
     
  10. sound

    sound Guest

    dapperkop

    ну так получаеться что
    if ($res === false) {
    и
    if ($rows === -1) {

    взаимоисключающие проверки ?
    если $res === false то и $rows === -1 и нет смысла делать две проверки достаточно первой if ($res === false) {

    или я опять не так понял ?
     
  11. dapperkop

    dapperkop Активный пользователь

    С нами с:
    26 сен 2013
    Сообщения:
    890
    Симпатии:
    0
    Ну понял вроде бы так... Вот только если есть возможность проверить результат запроса на присутствие ошибки, то я не вижу причин его не делать)

    Добавлено спустя 5 минут 32 секунды:
    Ну по поводу этого я бы конечно поспорил...