2015-01-24 8 views
-1

Этот результат запроса SQL-запроса, а затем сеанс сохраняет пустую переменную, например $_SESSION["fbid"] = $user->fbid;, и массив будет Array ([fbid] =>).mySQL возвращает результат, несмотря на то, что база данных пуста

$result = $mysqli->query("SELECT * FROM `users` WHERE `fbid` = '$fbid'") or die(mysqli_error()); 
    if ($result) { 
    $user = $result->fetch_object(); 
     ... 

Основной вопрос, почему он проходит через if ($result), когда нет каких-либо записей в базе данных?

+5

Поскольку результат _empty_ еще _valid_ результат. – CBroe

+1

Он возвращает false, когда запрос не увенчался успехом. Если он был успешным, но возвратил пустой набор, проверьте свойство num_rows возвращаемого объекта. –

ответ

1

Вы говорите if($result)

В этом говорится, что ваш, если всегда будет истинным.

Например, вы должны указать if($result == 1).

У вас должен быть равный или равный $ result.

Вот как работает инструкция if. Тем не менее, вы говорите «если запрос», который не будет работать в любом случае, вы должны сказать что-то подобное,

if(mysqli_num_rows($result) > 0){ 
    $user = $result->fetch_object(); 
}   
+0

'if ($ result == '' 1)' работал, спасибо! > 0, вероятно, будет работать, но я думаю, что оставлю это до 1, так как я также хочу ограничить запрос до 1. –

+0

вашего приветствия. вы также должны изменить свой запрос на '' SELECT * FROM users WHERE fbid = '$ fbid LIMIT 1' "' –

1

mysqli->query возвращает либо истинный или ложных или mysqli_result объект.

И истинный и mysqli_result объект будет проходить if($result) и false вернулся в случае ошибки. Получение пустого результата не является ошибкой.

Если вам нужно проверить, возвращает ли ваш запрос пустой результат, используйте, например, свойство $num_rows.

0

mysqli::query возвращает FALSE, если запрос не удался. В этом случае он не провалился - он был успешно выполнен и возвратил нулевые строки.

Если вы хотите, чтобы проверить наличие пустого набора результатов, проверьте возвращаемое значение fetch_object:

$user = $result->fetch_object(); 
if ($user) { 
    # do stuff... 
1

Ваш тест if ($result) потерпит неудачу, если только mysqli_query() не удается, возможно, с синтаксической ошибкой.

Если у вас есть действительный запрос, ваш тест пройдет. Это верно, даже если ваш действительный запрос возвращает пустой набор (ничего не найдено -).

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

Попробуйте

$result = $mysqli->query("select..."); 
if ($result->num_rows) { 
    // do stuff 
} 
Смежные вопросы