Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Функция всегда возвращает false

Modest Профи (533), закрыт 4 года назад
Здравствуйте. Хочу проверить, есть ли искомый ip в БД уже или нет.
var_dump(mysqli_num_rows($q)) выдает результат больше 0, и функция должна в данном случае вернуть true, но выводит постоянно false, как не крути условиями... Что я упускаю?
function isIp() {
$q = mysqli_query($connect, "select * from `base` where `ip` = '$ip' limit 1");
if(mysqli_num_rows($q) < 1) return false;
if(mysqli_num_rows($q) > 0) return true;
}

Такой вариант тоже не прокатывает
function isIp() {
$q = mysqli_query($connect, "select * from `base` where `ip` = '$ip' limit 1");
if(mysqli_num_rows($q) < 1) return false;
else return true;
}
Лучший ответ
dim565 Искусственный Интеллект (423791) 4 года назад
Вы обрезали код функции для наглядности? Я не вижу передачу переменных $connect и $ip. В остальном ошибок нет, повторил у себя, работает:
<?
$connect = mysqli_connect('localhost', 'user', 'pass', 'db_name');
$ip = '127.0.0.1'; // для примера заполнил базу
var_dump (isIp($connect, $ip)); // возвращает int(1) bool(true)

function isIp($connect, $ip) {
 $q = mysqli_query($connect, "select * from `base` where `ip` = '$ip' limit 1");
 var_dump(mysqli_num_rows($q)); // возвращает int(1)
 if(mysqli_num_rows($q) < 1) return false;
 if(mysqli_num_rows($q) > 0) return true;
}
?>
ModestПрофи (533) 4 года назад
Я обрезал, так как убежден в их достоверности.
Собственно, если бы $connect не работал, то я не получил бы ответа здесь вообще: "var_dump(mysqli_num_rows($q)) выдает результат больше 0", согласитесь?

$ip выводит через var_dump IP равный адресу в БД конечно же.
dim565 Искусственный Интеллект (423791) Да, согласен, если var_dump(mysqli_num_rows($q)) поместили внутрь функции и он возвращает 1, значит connect проходит и вся функция должна вернуть true. Вы проверяете результат функции через var_dump (isIp()) и выдает (bool)false?
ModestПрофи (533) 4 года назад
Ну а для еще большей полноты картины, дебаг:
var_dump($ip());
var_dump(isIp());
ModestПрофи (533) 4 года назад
Опечатался в комментарии $ip
ModestПрофи (533) 4 года назад
Как откуда? var_dump($ip) и выдает как раз string(13) "адрес". Что-то удивило?)
dim565 Искусственный Интеллект (423791) Тогда все правильно
Остальные ответы
Ordo Seclorum Оракул (58396) 4 года назад
Если результат меньше 1, вернёт false, то есть если будет 0 то всё равно вернёт false
Вот он и выполняет то, что первое выпало. Не могу проверить сейчас, но попробуй
ModestПрофи (533) 4 года назад
Так в том и дело, в БД есть как минимум одна запись и var_dump(mysqli_num_rows($q)) возвращает 1, а не 0...
Ordo Seclorum Оракул (58396) Modest, тогда ждём экспертов)
Саня Семенов Оракул (60428) 4 года назад
Ну судя по коду у тебя внутри функции не определена переменная $ip и в запрос подставляется пустота . Проверь с помощью var_dump($q)
ModestПрофи (533) 4 года назад
Советую почитать комментарии выше. Коротко: переменные просто не указаны, но работают как надо.
Саня Семенов Оракул (60428) Modest, кидай код целиком в котором ошибка. Тогда посмотрим а так ты в процессе сокращения ещё больше накосячил - невозможно отлаживать.
Похожие вопросы