【问题标题】:foreach on resultset mysql return only one value randomic结果集mysql上的foreach只返回一个随机值
【发布时间】:2015-05-03 09:45:40
【问题描述】:

我正在尝试在一个脚本中进行一些简单的选择。

我看看我是否尝试在一段时间内读取我的结果集没有任何问题,但是如果我尝试使用 foreach,我只是读取了 1 o 2 的值都错了...... 为什么?

$sql = " select * from tutorials_tbl";
$result = mysql_query($sql);
while ($row = mysql_fetch_array($result, MYSQL_BOTH)) {
    printf("ID: %s  Name: %s", $row[0], $row[1]);  
 }


 $sql = " select * from tutorials_tbl";
            $result = mysql_query($sql);
    foreach($rows= mysql_fetch_array($result, MYSQL_BOTH) as $row) {
     printf("ID: %s  Name: %s", $row[0], $row[1]);  
    }   

-

* OUTPUT WHILE*

ID: 0 Name: title0
ID: 1 Name: title1

ecc....

*OUTPUT FOREACH*

 ID: 1 Name: 
 ID: 1 Name: 
 ID: t Name: i
 ID: t Name: i 

【问题讨论】:

  • mysql_* 已被弃用,并为此目的使用 mysqli_* 或 PDO。并且在两者中都写 print_r($row);

标签: php mysql sql foreach resultset


【解决方案1】:

使用 foreach 只得到一行的原因是函数 mysql_fetch_array() 只返回一条记录。

在 while 循环中,函数被调用的条件在每个循环中都会重新计算。这是完美的。

你的 foreach 很奇怪,我在想 mysql_fetch_array() 将一条记录作为数组读取到变量 $rows 中,然后它会遍历记录中的每个 COLUMN....换句话说 $rows 只是一行,而 $row 是该行中的一个值。 您在输出中只看到一两个字母的原因是,字符串上的 $row[0] 只会给您字符串中的第 0 个字母。

foreach 工作的唯一方法是使用“获取所有”函数,该函数提供一个数组数组。但是你必须自己创建它......它可能主要包含while循环:)

如果您按照建议使用 PDO,则它具有 fetchAll 功能。

【讨论】:

  • 是问题所在......我尝试用一​​些框架 php 做我所做的事情,我认为他们为你构建了 fetchAll......谢谢!
【解决方案2】:
$sql = " select * from tutorials_tbl";
$result = mysql_query($sql);
while ($row = mysql_fetch_array($result, MYSQL_BOTH)) {
printf("ID: %s  Name: %s", $row['Attribute-1'], $row['Attribute-2']);  
}

foreach($rows= mysql_fetch_array($result, MYSQL_BOTH) as $row)
{
  echo $row['Attribute-1'];
  echo $row['Attribute-2'];
}

这个问题已经被问过了:Use mysql_fetch_array() with foreach() instead of while()
如果你愿意,你也可以从这里参考。 :D

【讨论】:

    【解决方案3】:

    这样试试

     $sql = " select * from tutorials_tbl";
     $result = mysql_query($sql);
     $rows= mysql_fetch_array($result, MYSQL_BOTH);
    
     foreach($rows as $row){
      echo 'ID '. $row->id.' Name '.$row->name;
    
     }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-22
      • 1970-01-01
      • 1970-01-01
      • 2014-09-25
      相关资源
      最近更新 更多