foreach on resultset mysql return 只有一个随机值
foreach on resultset mysql return only one value randomic
我正在尝试在一个脚本中做一些简单的 select。
我看看如果我尝试读取我的结果集有一段时间没有任何问题但是如果我尝试使用 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
这样试试
$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;
}
使用 foreach 只能获得一行的原因是函数 mysql_fetch_array() 仅 returns 一条记录。
在 while 循环中,调用函数的条件在每个循环中都会重新计算。这太完美了。
你的 foreach 很奇怪,我想发生的事情是 mysql_fetch_array() 将一条记录作为数组读入变量 $rows,然后它会遍历 $rows 中的每个 COLUMN记录....换句话说,$rows 只是一行,$row 是该行中的一个值。
你在输出中只看到一两个字母的原因是因为字符串上的 $row[0] 只给你字符串中的第 0 个字母。
foreach 工作的唯一方法是使用 'fetch all' 函数,该函数给出一个数组数组。但是你必须自己创建它......它可能主要包含 while 循环 :)
如果您按照建议使用 PDO,它会附带 fetchAll 功能。
$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
我正在尝试在一个脚本中做一些简单的 select。
我看看如果我尝试读取我的结果集有一段时间没有任何问题但是如果我尝试使用 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
这样试试
$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;
}
使用 foreach 只能获得一行的原因是函数 mysql_fetch_array() 仅 returns 一条记录。
在 while 循环中,调用函数的条件在每个循环中都会重新计算。这太完美了。
你的 foreach 很奇怪,我想发生的事情是 mysql_fetch_array() 将一条记录作为数组读入变量 $rows,然后它会遍历 $rows 中的每个 COLUMN记录....换句话说,$rows 只是一行,$row 是该行中的一个值。 你在输出中只看到一两个字母的原因是因为字符串上的 $row[0] 只给你字符串中的第 0 个字母。
foreach 工作的唯一方法是使用 'fetch all' 函数,该函数给出一个数组数组。但是你必须自己创建它......它可能主要包含 while 循环 :)
如果您按照建议使用 PDO,它会附带 fetchAll 功能。
$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