3

这是我的代码:

            $stmt1 = $db->prepare("SELECT wins FROM users WHERE id = ?");
            $stmt2 = $db->prepare("SELECT losses FROM users WHERE id = ?");

            $stmt1->bind_param("i", $_SESSION["id"]);
            $stmt2->bind_param("i", $_SESSION["id"]);

            $stmt1->bind_result($db_wins);
            $stmt2->bind_result($db_losses);

            $stmt1->execute();
            $stmt2->execute();

            $stmt1->fetch();
            $stmt2->fetch();

            // Print out user scores
            echo "<p><strong>User:</strong> " . $_SESSION["username"] . "</p>\n";
            echo "<p><strong>Wins:</strong> " . $db_wins . "</p>\n";
            echo "<p><strong>Losses:</strong> " . $db_losses . "</p>\n";

一切都正确打印,除了损失,当它应该打印表中的值时打印 0。

注意事项:

  • 它按预期在页面下方打印值,但不使用准备语句。
  • 如果我在 phpMyAdmin(返回 0 的查询)或 Sequel Pro 中运行它,它会返回正确的损失值。
4

3 回答 3

1

我同意上面 Kolink 的评论,但我认为将代码更改为以下内容也应该可以解决问题。PHP 页面提供了以下替代方案,也许也可以在您的情况下使用?编辑:显然,您仍然可以将 bind_param 加入其中。

/* prepare statement */
if ($stmt = $mysqli->prepare("SELECT Code, Name FROM Country ORDER BY Name LIMIT 5")) {
   $stmt->execute();

   /* bind variables to prepared statement */
   $stmt->bind_result($col1, $col2);

   /* fetch values */
   while ($stmt->fetch()) {
       printf("%s %s\n", $col1, $col2);
   }

   /* close statement */
   $stmt->close();
}
于 2013-02-22T20:57:52.837 回答
0

您正在使用fetch()没有参数,因此默认情况下它应该返回您想要的数据。如果您传入PDO::FETCH_BOUND,则可能会根据文档触发绑定操作。

于 2013-02-22T20:56:03.410 回答
0

您是否尝试计算 ($db_losses) 而不仅仅是打印 de variable ?

有时 Mysql 数组中的指针不在第一个元素处,而是留在数组的最后一个打印 0 的元素上!

尝试在您的阵列上使用 reset() 函数。http://www.php.net/reset

于 2013-02-22T21:01:10.157 回答