【发布时间】:2010-05-27 21:27:26
【问题描述】:
以下代码不起作用的任何原因?
$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();,后来我抓取了同一个实例,所以数据库连接被关闭了。
【问题讨论】:
-
您得到了哪些错误消息/不需要的输出,您期望什么?
-
看起来应该可以了。也许检查您的输入是否符合您的预期?所以 var_dump($username);等等。或者只是为了调试目的,实际上将用户名放入查询中,看看是否是绑定输入或绑定输出等问题。
-
我刚刚发布了 db 类,以防万一可能有问题。
-
@Rich Adams - 我做了 var dump...$username 设置正确。我终于能够生成上面编辑的错误。