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


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

528   12  

12 ответов:

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 и протоколирование ошибки где-то.

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

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

что более логично, чем тестирование типа переменной результата перед обработкой? Это либо типа 'логическое' или 'ресурс'. Когда вы используете логический параметр for с 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);  
 }

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

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

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

if (!$result) { PERFORM ACTION }

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

С mysql_fetch_row потому что " для SELECT, SHOW, DESCRIBE, EXPLAIN и других операторов, возвращающих resultset, 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;
    }
}
$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 }

Comments

    Ничего не найдено.