Делаю запрос из PHP к базе Postgres Код (Text): $res = pg_query_params($pgsql_conn, 'SELECT * FROM orders;'); $rows = pg_num_rows($res); Иногда $rows равно нулю если записей нет, а иногда при проблеме на сервере $rows ничему не равно Но при проверке типо Код (Text): if($rows==""){} это тоже самое что и Код (Text): if($rows==0){} Как проверить что $rows пустая и не равно положительному числу или нулю ?? Нужно как то детектить ошибку запроса, потому что если с запросом все ок, но он возвращает ноль записей эта ситуация обрабатываеться по другому.
нет не возращает он -1 к примеру делаю явную ошибку удаляю первую букву в запросе Код (Text): $res = pg_query_params($pgsql_conn, 'ELECT * FROM orders;'); $rows = pg_num_rows($res); в итоге $rows ничему не равно, echo ничего не печатает, и $rows при проверке в условии равно 0
Код (PHP): $res = pg_query_params($pgsql_conn, 'ELECT * FROM orders;'); if ($res === false) { echo 'Тут у тебя ошибка 1'; } else { $rows = pg_num_rows($res); if ($rows === -1) { echo 'Тут у тебя ошибка 2'; } else { echo 'Тут у тебя без ошибок'; } }
А что за ошибка может быть Код (Text): if ($rows === -1) { echo 'Тут у тебя ошибка 2'; } и что за тройное равно === ? это для постгрес что то ? в яндесе про === ничего не нашел
=== это строгое сравнение. Если в доке пишется, что в случае ошибки возвращается -1, то ты должен строго сравнить возвращаемое значение с -1. Просто некоторые начинают сравнивать: if ($rows == "") или if ($rows == "-1"). Это неправильно. По написанному выше. Ошибка при выборе количества строк результата запроса. Другими словами, если ты попал в блок, где выводится "Тут у тебя без ошибок", то это значит, что $rows присвоено значение >= 0.
Код (Text): if ($rows === -1) {} то есть этот код эквивалентен если запрос возвращает ноль строк ? или это какая то ошибка ? просто я понять не могу если это ошибка то какая, если с запросом все ок, то есть $res !== false, строк может быть или больше нуля или равно нулю
... Смотри... Ты когда делаешь запрос, Код (Text): $res = pg_query_params($pgsql_conn, 'ELECT * FROM orders;'); то ты должен получить ресурс #resource. Далее, с помощью фуцкций php, ты можешь из этого ресурса получить требуемые тебе данные. Если при выполнении запроса возникла ошибка, то переменная $res будет равна false... Далее ты пишешь: Код (PHP): $rows = pg_num_rows($res); Эта строка кода вернуть тебе кроме -1 ничего не может, так как ты вставил в pg_num_rows значение false... А должен был вставить #resource. В итоге ты получаешь ошибку при выполнении запроса, не идентифицируешь ее... Далее ты получаешь ошибку при попытке выбрать количество возвращаемых значений, пытаешься ее идентифицировать, но так как ты не умеешь правильно идентифицировать ее присутствие - в итоге ничего не получаешь... Добавлено спустя 1 минуту 39 секунд: Она не может быть пустой, она обязательно будет равна от -1 и выше...
dapperkop ну так получаеться что if ($res === false) { и if ($rows === -1) { взаимоисключающие проверки ? если $res === false то и $rows === -1 и нет смысла делать две проверки достаточно первой if ($res === false) { или я опять не так понял ?
Ну понял вроде бы так... Вот только если есть возможность проверить результат запроса на присутствие ошибки, то я не вижу причин его не делать) Добавлено спустя 5 минут 32 секунды: Ну по поводу этого я бы конечно поспорил...