Проверка правильности ресурса результатов MySQL - PullRequest
6 голосов
/ 23 апреля 2009

У меня есть этот код:

$rows = array();
$res = mysql_query($someQuery);

if(!mysql_errno())
    while($row = mysql_fetch_assoc($res))
        $rows[] = $row;

$someQuery - произвольный запрос, который я записываю в форму. Mysql_errno ловит случай, когда я пишу запрос mysql с ошибками в нем. Но я только что обнаружил, что когда я делаю запрос «Удалить из имени таблицы», это, конечно, не ошибка, но в то же время mysql_fetch_assoc завершается с ошибкой «Предупреждение: mysql_num_rows (): предоставленный аргумент не является допустимым результатом MySQL» ресурс в /blah/blah/file.php в строке x ".

Я пытался найти его в руководстве (может быть, я просто слепой ...), но есть ли функция, которую я могу использовать, чтобы проверить, является ли $ res действительным ресурсом результата MySQL или нет?

Ответы [ 6 ]

7 голосов
/ 23 апреля 2009

if ($res) должно работать нормально, чтобы проверить, является ли это ресурсом. is_resource () определит, является ли он действительным ресурсом вообще.

Вы также можете проверить mysql_affered_rows , чтобы попытаться определить, является ли он INSERT / UPDATE / etc

3 голосов
/ 09 июля 2011

Наряду с is_resource() вы можете использовать get_resource_type(), чтобы проверить, является ли это ресурсом MySQL.

$res_type = is_resource($res) ? get_resource_type($res) : gettype($res);

if(strpos($res_type, 'mysql') === false) {
    echo 'Invalid resource type: ' . $res_type;
}

get_resource_type() может возвращать "mysql link" или "mysql link persistent" в зависимости от типа подключения.

2 голосов
/ 15 октября 2010

Проверьте http://www.lampdocs.com/blog/2010/10/how-to-check-that-a-php-variable-is-a-mysql-resource/ для решения. Надеюсь это поможет.

2 голосов
/ 23 апреля 2009

mysql_query() возвращает true или false, поэтому вы можете проверить это следующим образом:

if($res) {
    // The query succeeded.
}
0 голосов
/ 23 апреля 2009

Возможно, просто измените условие на:

if(!mysql_errno() && @mysql_num_rows($res) > 0)

Условное условие не будет выполнено, если строк нет, и @ подавит предупреждение.

0 голосов
/ 23 апреля 2009

Если вы ВСТАВИТЕ, ОБНОВИТЕ, УДАЛИТЕ или УДАЛИТЕ через mysql_query, то он вернет только true или false (в зависимости от успешности операции).

Я не уверен, что вы ожидаете от ресурса в этом случае?

Если вам нужно количество затронутых строк, вы можете использовать mysql_affected_rows().

...