Лучший способ проверить, если результаты 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 }

Что лучший способ состоит в том, чтобы сделать это?

62
задан 26 November 2010 в 18:37

13 ответов

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

Для PHP 5 и 7 и выше использования mysqli:

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

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

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

131
ответ дан 31 October 2019 в 13:31

Что более логично затем тестирование ТИПА переменной результата перед обработкой? Это - или типа 'булевская переменная' или 'ресурса'. При использовании булевской переменной для параметра с mysqli_num_rows предупреждение будет сгенерировано, потому что функция ожидает ресурс.

$result = mysqli_query($dbs, $sql);

if(gettype($result)=='boolean'){ // test for boolean
    if($result){  // returned TRUE, e.g. 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);  
 }
3
ответ дан 31 October 2019 в 13:31
$result = $mysqli->query($query);
if($result){
    perform action
}

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

0
ответ дан 31 October 2019 в 13:31

Если все еще требуется выполнить действие, если эти $result недопустимо:

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

Это будет составлять 0 и false, который возвращается mysql_num_rows() при отказе.

0
ответ дан 31 October 2019 в 13:31

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 ...
}
0
ответ дан 31 October 2019 в 13:31
$connect = new mysqli('localhost', 'user', 'password', 'db');
$result = $connect->query("select * from ...");
$count=$result->num_rows;
if(empty($count)){
echo"Query returned nothing";
}
else{
echo"query returned results";
} 
0
ответ дан 31 October 2019 в 13:31
if (mysql_num_rows($result)!=0) { PERFORM ACTION } 

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

-1
ответ дан 31 October 2019 в 13:31

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

if(!empty($result)){
           //DO STUFF
}
5
ответ дан 31 October 2019 в 13:31

Один способ сделать это состоит в том, чтобы проверить что 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 и регистрируя ошибку где-нибудь.

12
ответ дан 31 October 2019 в 13:31

Из всех опций выше я использовал бы

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

проверка по сравнению с результатом как ниже

if (!$result) { PERFORM ACTION }

, Это будет верно, если mysql_error произойдет так эффективно, если бы ошибка произошла, то Вы могли бы затем ввести дублирующееся имя пользователя...

2
ответ дан 31 October 2019 в 13:31

Используйте тот с mysql_fetch_row, потому что "Для ВЫБОРА, ПОКАЖИТЕ, ОПИШИТЕ, ОБЪЯСНИТЕ и другие операторы, возвратив набор результатов, mysql_query () возвращает ресурс на успехе или ЛОЖЬ на ошибке.

Для другого типа SQL-операторов, ВСТАВЬТЕ, ОБНОВИТЕ, УДАЛИТЕ, ОТБРОСЬТЕ, и т.д., mysql_query () возвращает TRUE на успехе или ЛОЖЬ на ошибке".

1
ответ дан 31 October 2019 в 13:31

Обычно я использую === ( тройной, равняется ), и __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;
    }
}
0
ответ дан 31 October 2019 в 13:31
if (mysql_num_rows($result)>0) { PERFORM ACTION }
if ($result) { PERFORM ACTION }
-2
ответ дан 31 October 2019 в 13:31

Другие вопросы по тегам:

Похожие вопросы: