Лучший способ проверить, вернулись ли результаты MySQL в PHP?

Я ищу лучший способ проверить и посмотреть, были ли какие-либо результаты возвращены в запросе. Я чувствую, что очень часто пишу эту часть кода, а иногда получаю ошибки, а иногда и нет.

Например, я запускаю этот запрос, чтобы проверить, существует ли имя пользователя до вставки нового в базу данных.

$result = mysql_query("SELECT * FROM ..."); 

Затем я хочу проверить и посмотреть, были ли возвращены какие-либо результаты. Вот один из способов:

 if (!$result) { PERFORM ACTION } 

Если первый способ не работает, то иногда это будет:

 if (mysql_num_rows($result)==0) { PERFORM ACTION } 

Тогда я даже увидел, что могу сделать это так на днях:

 list($total) = mysql_fetch_row($result); if ($total==0) { PERFORM ACTION } 

Каков наилучший способ сделать это?

Solutions Collecting From Web of "Лучший способ проверить, вернулись ли результаты MySQL в PHP?"

 if (mysql_num_rows($result)==0) { PERFORM ACTION } 

Это получает мой голос.

Предполагаемый запрос OP не возвращает никакой ошибки, поэтому это должно быть одним из способов

Один из способов сделать это – проверить, что возвращает mysql_num_rows . Минимальным полным примером будет следующее:

 if ($result = mysql_query($sql) && mysql_num_rows($result) > 0) { // there are results in $result } else { // no results } 

Но рекомендуется проверить возвращаемое значение mysql_query и правильно обработать его в случае, если оно false (что было вызвано ошибкой); возможно, также вызвав mysql_error и mysql_error ошибку где-нибудь.

Всякий раз, когда мы выполняем запросы для получения некоторых данных, он возвращается как объект. Затем большинство из нас преобразует его в массив, чтобы легко перебирать строки. В php «empty ()» функция используется для проверки того, является ли массив пустым, т. Е. Если в нем нет данных. Поэтому мы можем проверить, не является ли возвращенное представление массива запроса пустым, делая это

 if(!empty($result)){ //DO STUFF } 

Что более логично, чем тестировать ТИП переменной результата перед обработкой? Это либо тип «boolean», либо «resource». Когда вы используете логический параметр для параметра с mysqli_num_rows, будет генерироваться предупреждение, потому что функция ожидает ресурс.

 $result = mysqli_query($dbs, $sql); if(gettype($result)=='boolean'){ // test for boolean if($result){ // returned TRUE, eg in case of a DELETE sql echo "SQL succeeded"; } else { // returned FALSE echo "Error: " . mysqli_error($dbs); } } else { // must be a resource if(mysqli_num_rows($result)){ // process the data } mysqli_free_result($result); } 

Из всех вышеперечисленных вариантов я бы использовал

if (mysql_num_rows($result)==0) { PERFORM ACTION }

проверка на результат, как показано ниже

 if (!$result) { PERFORM ACTION } 

Это будет верно, если mysql_error возникает так эффективно, если возникла ошибка, вы можете ввести двойное имя пользователя …

Используйте одно с mysql_fetch_row потому что «Для SELECT, SHOW, DESCRIBE, EXPLAIN и других операторов, возвращающих набор результатов, mysql_query () возвращает ресурс с успехом или FALSE при ошибке.

Для других типов операторов SQL INSERT, UPDATE, DELETE, DROP и т. Д. Mysql_query () возвращает TRUE при успешном завершении или FALSE при ошибке. "

Обычно я использую === ( тройные равные ) и __LINE__ , __CLASS__ чтобы найти ошибку в моем коде:

 $query=mysql_query('SELECT champ FROM table') or die("SQL Error line ".__LINE__ ." class ".__CLASS__." : ".mysql_error()); mysql_close(); if(mysql_num_rows($query)===0) { PERFORM ACTION; } else { while($r=mysql_fetch_row($query)) { PERFORM ACTION; } } в $query=mysql_query('SELECT champ FROM table') or die("SQL Error line ".__LINE__ ." class ".__CLASS__." : ".mysql_error()); mysql_close(); if(mysql_num_rows($query)===0) { PERFORM ACTION; } else { while($r=mysql_fetch_row($query)) { PERFORM ACTION; } } 
 $result = $mysqli->query($query); if($result){ perform action } 

это то, как я это делаю, вы могли бы также выбросить еще что-нибудь с умирающим …

Если вы все равно хотите выполнить действие, если $result недействителен:

 if(!mysql_num_rows($result)) // Do stuff 

Это будет содержать 0 и false , возвращаемое mysql_num_rows() при ошибке.

mysqli_fetch_array() возвращает NULL если строки нет.

В процедурном стиле:

 if ( ! $row = mysqli_fetch_array( $result ) ) { ... no result ... } else { ... get the first result in $row ... } 

В объектно-ориентированном стиле:

 if ( ! $row = $result->fetch_array() ) { ... } else { ... get the first result in $row ... } 
 if (mysql_num_rows($result)!=0) { PERFORM ACTION } 

Таким образом, вы проверяете и действуете, если результат положительный, (у вас есть запись в вашей БД, которая соответствует вашему запросу), в противном случае (== 0) вы выполнили действие, когда результат не был задан.

 if (mysql_num_rows($result)>0) { PERFORM ACTION } if ($result) { PERFORM ACTION }