Подтвердить что ты не робот

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

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

4b9b3361

Ответ 1

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

Для PHP 5 и 7 и выше используйте mysqli:

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

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

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

Ответ 2

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

Ответ 3

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

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

Ответ 4

Что более логично, чем тестировать ТИП переменной результата перед обработкой? Это либо тип "boolean", либо "resource". Когда вы используете логический параметр для параметра с 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);  
 }

Ответ 5

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

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

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

if (!$result) { PERFORM ACTION }

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

Ответ 6

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

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

Ответ 7

Обычно я использую === (тройной эквивалент) и __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;
    }
}

Ответ 8

$result = $mysqli->query($query);
if($result){
    perform action
}

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

Ответ 9

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

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

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

Ответ 10

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 ...
}

Ответ 11

$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";
} 

Ответ 12

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

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

Ответ 13

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