【问题标题】:MySQLI Prepared Statement Not Binding ProperlyMySQLI 准备好的语句未正确绑定
【发布时间】: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 设置正确。我终于能够生成上面编辑的错误。

标签: php mysqli


【解决方案1】:

我尝试始终检查每个数据库调用的返回值...其中大多数至少返回一个成功/失败布尔值。如果返回值不是你所期望的,你可以使用 mysqli->error 来发出一些可以理解的东西。这是一个例子:

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

这样做的好处是您可以保留调试代码,如果出现奇怪的数据库连接问题或其他问题,这将有助于缩小问题范围。

【讨论】:

  • 哦,您的模型中有异常处理...所以我使用 die() 的示例可能不是您想要的。但是您仍然可以检查每个返回值。
  • 非常好的建议,谢谢。然而,当我在上面编辑我的帖子时,我终于能够输出一些错误/警告。第一个是它无法获取数据库。我的单例类有什么问题吗,因为我可以从另一个页面连接到数据库。
【解决方案2】:

已解决

好的。我解决了我的问题。我猜你不应该在使用单例类时关闭数据库连接?我没有意识到这一点。问题是,在调用“登录”函数之后,我做了一个 $dbconn->close();后来我抓取了同一个实例,所以数据库连接被关闭了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-04
    • 2013-11-23
    相关资源
    最近更新 更多