MySQLI подготовленный оператор не связывает должным образом - PullRequest
0 голосов
/ 28 мая 2010

Любая причина, почему следующий код не будет работать?

$dbconnection = db::getInstance();  //this is a singleton db class

$stmt = $dbconnection->prepare("SELECT `id` from `table` where `username`=?");
$stmt->bind_param("s", $username);
$stmt->execute();
$stmt->bind_result($uid);
$stmt->fetch();

echo $uid;

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

edit: Я не получаю сообщения об ошибке. echo $uid просто ничего не выводит. Он должен отображать идентификатор пользователя из БД (да, этот запрос из БД работает правильно, проверил его).

Можете ли вы предложить хороший способ отладки, если вы не можете сразу увидеть проблему?

редактировать: Попытка переключения execute() and bind_result() позиций, без разницы.

редактировать Я наконец-то получил ошибку / предупреждение:

Предупреждение: mysqli_stmt :: mysqli_stmt () [mysqli-stmt.mysqli-stmt]: не удалось получить db

решаемые

Хорошо. Я решил свою проблему. Я полагаю, вы не должны закрывать соединение с БД при использовании одноэлементного класса? Я не знал об этом. Проблема заключалась в том, что после вызова функции «вход в систему» ​​я сделал $dbconn->close();, а позже я захватил тот же экземпляр, поэтому соединение с БД было закрыто.

Ответы [ 2 ]

0 голосов
/ 28 мая 2010

решаемые * +1002 *

Хорошо. Я решил свою проблему. Я полагаю, вы не должны закрывать соединение с БД при использовании одноэлементного класса? Я не знал об этом. Проблема состояла в том, что после вызова функции входа в систему я сделал $ dbconn-> close (); А потом я захватил тот же экземпляр, поэтому соединение с БД было закрыто.

0 голосов
/ 28 мая 2010

Я стараюсь всегда проверять возвращаемые значения каждого вызова базы данных ... большинство из них возвращают как минимум логическое значение успеха / неудачи. И вы можете использовать mysqli-> error, чтобы выдать что-то вразумительное, если возвращаемое значение не соответствует ожидаемому. Вот пример:

  $stmt->bind_result($uid)
     or die("Error binding result - ".$stmt->error) ;

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...