【问题标题】:Why does SQL/PHP outputs double the information? [duplicate]为什么 SQL/PHP 输出的信息会加倍? [复制]
【发布时间】:2017-11-04 15:20:51
【问题描述】:

数据库(命名为countries):

ID         NAME              ISO         TAG
----------------------------------------------------------------------
1          Netherlands       NL          Dutch
2          Germany           DE          Deutsch
3          Poland            PL          Polski
4          Rusia             RU          Ruski

PHP 7 和 mysqli 代码:

$conn = mysqli_connect('localhost', 'root', '', 'test');
$key = "SELECT ID FROM countries";
$result = mysqli_query($conn, $key);
while ($row = mysqli_fetch_array($result)) {
   foreach ($row as $key) {
      echo $row['name'];
      echo '<br>';
    }
 }

这将输出11223344。将 SQL 代码更改为 $key = "SELECT ID, NAME FROM countries"; 时,输出将为 1111222233334444(第一个的两倍)。为什么输出是双倍的,为什么当我添加额外的行时它会添加双倍的 ID?

【问题讨论】:

  • mysqli_fetch_array 在未指定时返回 2 行类型,告诉它只返回关联。
  • 我不确定您如何从提供的示例中获得11223344 1111222233334444 的任何输出。该代码与您所说的不匹配(?)
  • @Randall 哎呀,它应该回显 $row['ID']'. Then It will output the 11223344. Apparently this is from having a while` 和 foreach
  • 啊,好吧,这更有意义! :)
  • @Jeff 是因为没有定义返回所以它做了MYSQLI_BOTH,使用MYSQLI_ASSOCphp.net/manual/en/mysqli-result.fetch-array.php

标签: php mysqli foreach while-loop


【解决方案1】:

mysqli_fetch_array() 使用像$row[0] 这样的数字键获取数据。

mysqli_fetch_assoc() 用于$row['name'] 之类的命名键,并删除对其进行迭代的foreach()

while ($row = mysqli_fetch_assoc($result)) {
    echo $row['name'];
    echo '<br>';
}

【讨论】:

    猜你喜欢
    • 2021-09-21
    • 1970-01-01
    • 1970-01-01
    • 2017-09-22
    • 2016-07-29
    • 1970-01-01
    • 1970-01-01
    • 2011-10-27
    • 2015-12-23
    相关资源
    最近更新 更多