Php не работает запрос в бд.

R
На сайте с 03.08.2012
Offline
131
1662

Запрос в бд:

$mysqli = new mysqli(''.$bd_db.'', ''.$bd_user.'', ''.$bd_password.'', ''.$bd_base.'');


$proverka = $mysqli->prepare("SELECT `id` FROM `users` WHERE `username`=?");
$proverka->bind_param("s", $login);
$proverka->execute();
$proverka = $proverka->get_result();
if($proverka->num_rows > 0){ echo 1; }

Не работает!!! 10 раз проверял все вводимые данные, все столбцы в бд и т.п. Подключение mysqli работает! Запрос не выполняется! Ошибка на строке: $proverka = $proverka->get_result(); !!! ЧТо делать, подскажите? Уже 2 часа мучаюсь...

---------- Добавлено 16.12.2013 в 19:20 ----------

Если попробовать перед ошибкой вывести переменную через print_r($proverka) то выводит: mysqli_stmt Object ( )

Хотя должен выбрать, в бд есть строки. Делал запрос в phpmyadmin, там он работает.

siv1987
На сайте с 02.04.2009
Offline
427
#1
revered:
''.$bd_db.''

WTF?

http://www.php.net/manual/ru/book.mysqli.php

if($mysqli->connect_errno){

die('Error connect to db '.$mysqli->connect_error);

}

revered:
Ошибка на строке: $proverka = $proverka->get_result();

var_dump($login);

http://www.php.net/manual/ru/mysqli-stmt.get-result.php

R
На сайте с 03.08.2012
Offline
131
#2

if($mysqli->connect_errno){

die('Error connect to db '.$mysqli->connect_error);

}

Ошибку не выдает, подключение к бд нормальное.

Чето я не пойму зачем var_dump($login)? Он просто выводит $login, показывает что это string и 7 символов. А мне что это дает?

---------- Добавлено 16.12.2013 в 19:46 ----------

php версия 5.2.17, поэтому не работает?

---------- Добавлено 16.12.2013 в 20:04 ----------

Правильно я понял?

siv1987
На сайте с 02.04.2009
Offline
427
#3
revered:
А мне что это дает?

Это дает как минимум то, что $login не пустой.

Капайте в сторону своего запросу, если 0 записей - значит mysql по такому запросу совпадений не нашел. Отсюда и ходите. Проверяйте ту ли базу вы указали, в правильной кодировке ли $login если кириллица и тд. Полтергейстов не бывают (не в этой ситуации).

R
На сайте с 03.08.2012
Offline
131
#4
siv1987:
Это дает как минимум то, что $login не пустой.

Капайте в сторону своего запросу, если 0 записей - значит mysql по такому запросу совпадений не нашел. Отсюда и ходите. Проверяйте ту ли базу вы указали, в правильной кодировке ли $login если кириллица и тд. Полтергейстов не бывает (не в этой ситуации).

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

siv1987
На сайте с 02.04.2009
Offline
427
#5
revered:
Но теперь как я понял, это из-за версии PHP?

Как вы это поняли из вышесказанного, мне вот интересно? Кроме вас насчет версии php здесь больше никто ничего не говорил.

Капайте дальше свой запрос... Условие лучше всего делать по числовой айдишке. В качестве запроса вообще можно сделать простой COUNT(*) без никаких условий. Переделайте код на процедурный, если вы уверены что записей там есть а объект mysqli вас обманывает. Переделайте на обычный драйвер mysql/

R
На сайте с 03.08.2012
Offline
131
#6
siv1987:
Как вы это поняли из вышесказанного, мне вот интересно? Кроме вас насчет версии php здесь больше никто ничего не говорил.
Капайте дальше свой запрос... Условие лучше всего делать по числовой айдишке. В качестве запроса вообще можно сделать простой COUNT(*) без никаких условий. Переделайте код на процедурный, если вы уверены что записей там есть а объект mysqli вас обманывает. Переделайте на обычный драйвер mysql/

Я уже пробовал переделывать запрос, если он через query:

$proverka = $mysqli->query("SELECT `id` FROM `users` WHERE `email`='$email' AND `md5_email`='$md5_email' ");

То все прекрасно работает. Такой код:

$add_user = $mysqli->prepare("INSERT INTO `users` (`username`, `email`, `password`, `date`, `md5_email`) VALUES (?, ?, ?, ?, ?)");

$add_user->bind_param("sssss", $login, $email, $password, $date, $md5_email);
$add_user->execute();
$add_user->close();

Тоже прекрасно работает. Ошибка была только (похоже) в $proverka = $proverka->get_result();

http://www.php.net/manual/ru/mysqli-stmt.get-result.php <- сдесь написано, что версия PHP: (PHP 5 >= 5.3.0) Следовательно, версия должна быть более 5.3 У меня версия 5.2.17, исходя из этого у меня не работает эта функция, а следовательно и не выполняется запрос, хотя запрос без этой функции, тот же insert работает нормально. Выходит вся проблема в версии PHP, правильно?

LEOnidUKG
На сайте с 25.11.2006
Offline
1774
#7

Да ёмаё, или версию 5,4 поставьте стабильную или юзайте обычный mysql запросы без всяких наворотов.

✅ Мой Телеграм канал по SEO, оптимизации сайтов и серверов: https://t.me/leonidukgLIVE ✅ Качественное и рабочее размещение SEO статей СНГ и Бурж: https://getmanylinks.ru/ ✅ Настройка и оптимизация серверов https://getmanyspeed.ru/
siv1987
На сайте с 02.04.2009
Offline
427
#8
revered:
Следовательно, версия должна быть более 5.3 У меня версия 5.2.17

Следовательно да.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий