为什么一个查询返回正确的值,但是它返回0之后的那个?

时间:2013-02-22 20:49:33

标签: php mysql mysqli

这是我的代码:

            $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中运行它,它会返回正确的损失值。

3 个答案:

答案 0 :(得分:1)

我同意上面Kolink的评论,但我认为将代码更改为以下代码也会使问题消失。 PHP pages提供以下替代方案,也许这也适用于您的情况?编辑:显然你仍然可以将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();
}

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

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

尝试在数组上使用reset()函数。 http://www.php.net/reset