以下代码无效的原因是什么?
$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;
在其他地方使用相同的连接方法,它在那里工作。它工作的其他页面的唯一区别是提取了多行,而不仅仅是一行。
编辑:我没有收到任何错误消息。 echo $uid
只是输出任何内容。它应该从数据库回显用户的ID(是的,来自数据库的查询正常工作,测试它)。
如果您不能立即发现问题,是否可以建议一种调试方法?
修改
尝试转换execute() and bind_result()
位置,没有区别。
修改 我终于得到了错误/警告:
警告:mysqli_stmt :: mysqli_stmt()[mysqli-stmt.mysqli-stmt]:无法获取数据库
解决
好。我解决了我的问题。我猜你在使用单例类时不应该关闭数据库连接?我没有意识到这一点。问题是,在调用“登录”函数后,我执行了$dbconn->close();
后来我抓住了同一个实例,因此数据库连接已关闭。
答案 0 :(得分:0)
我尝试始终检查每个数据库调用的返回值...大多数返回至少一个成功/失败布尔值。如果返回值不符合您的预期,您可以使用mysqli->错误来发出可理解的内容。这是一个例子:
$stmt->bind_result($uid)
or die("Error binding result - ".$stmt->error) ;
关于这样做的最好的事情是你可以保留调试代码,如果有任何奇怪的数据库连接问题,它将有助于缩小问题。
答案 1 :(得分:0)
<强>解决强>
好。我解决了我的问题。我猜你在使用单例类时不应该关闭数据库连接?我没有意识到这一点。问题是,在调用“登录”功能后,我做了一个$ dbconn-&gt; close();后来我抓住了同一个实例,因此数据库连接已关闭。