2013-02-22 68 views
3

这里是我的代码:为什么一个查询返回正确的值,但是返回0后的那个正确的值?

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

为什么不选择'SELECT赢,从用户WHERE id =?丢失',然后从结果数组中获取两个字段? – 2013-02-22 20:50:46

+2

几乎总是比在两个查询中获取不同列的查询中的两列更好。 – tadman 2013-02-22 20:51:56

+0

辉煌,Kolink。卫生署。 – 2013-02-22 21:07:33

回答

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(); 
} 
0

您使用的是没有参数的fetch(),所以默认情况下它应该返回你想要的数据。如果您通过PDO::FETCH_BOUND可能触发绑定操作为per the documentation

0

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

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

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

相关问题