【问题标题】:mysqli query returns true but fetch_assoc doesn't workmysqli 查询返回 true 但 fetch_assoc 不起作用
【发布时间】:2019-04-20 09:14:50
【问题描述】:

我在 XAMPP 中使用 PHP 和 MySQL (mysqli),我有一个下拉菜单,用户必须选择一个,然后使用查询来查找已选择但不起作用的值的 id。我已经做了三遍了,它成功了,但是这个没有。

    $sql = "SELECT foo_id FROM foo_table
WHERE foo_name = 'bar';";
    $res = $conn->query($sql);
    for ($i = 0; $i < 500; $i++) {
        $row = $res->fetch_assoc();
        echo $row[row["foo_id"]]
    }

问题是即使 $res 变量返回 true,fetch_assoc 也不会返回任何内容。

编辑:我忘了说在 phpmyadmin 中运行查询会正常返回结果。

【问题讨论】:

  • 你为什么做一个(不正确的)双索引$row[row["foo_id"]]?这甚至会给你警告(这是伪装的错误)。检查您的日志并使您的代码运行时没有错误、警告或通知。
  • SELECT 查询已成功执行并不意味着结果集中有任何数据。您可以通过num_rows 字段检查结果集有多大。
  • @Progman,如果我在 phpmyadmin 中运行查询,会有一个结果,但是当我在上面的代码中执行时,没有。

标签: php mysql mysqli


【解决方案1】:

我不确定您为什么要迭代超过 500 次?这没有意义。

从数据库中检索数据的最佳做法是

$sql  = "SELECT foo_id FROM foo_table
          WHERE foo_name = 'bar'";
$res = $conn->query($sql);
if ($res->num_rows > 0) {
   // output data of each row
   while($row = $res->fetch_assoc()) {
      echo $row["foo_id"];
   }
 }

 $foo_id = ''
 if ($res->num_rows > 0) {
   // output data of each row
   while($row = $res->fetch_assoc()) {
      $foo_id = $row["foo_id"];
   }
 }
 for ($i = 0; $i < 500; $i++) {
    echo $foo_id;
 }

【讨论】:

  • 这是原始代码,500 次迭代是我试图解决问题的结果(以错误的方式(显然))
  • 另外,我刚刚注意到您的示例代码有 $res 和 $result,我想您忘记更改其中一个变量的名称,您可能需要编辑它
【解决方案2】:

我找到了解决办法,问题是真实数据库在记录中使用了希腊字符,并且必须将数据库设置为utf8-bin,这样做之后就可以了。

【讨论】:

    猜你喜欢
    • 2014-01-13
    • 2012-09-26
    • 2018-05-12
    • 2012-10-26
    • 2018-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多