mysql_fetch_array 不呈现 SQL 查询的期望值

Posted

技术标签:

【中文标题】mysql_fetch_array 不呈现 SQL 查询的期望值【英文标题】:mysql_fetch_array doesn't render the expect values of the SQL query 【发布时间】:2014-05-17 10:44:46 【问题描述】:

phpMyAdmin 界面中,我运行以下 SQL 查询:

SELECT id FROM table WHERE family = '1' AND type = 'B1'

并收到以下结果:

“1”、“18546269”、“51534064”是正确的。

然后我用PHP写了以下代码:

$query = "SELECT id FROM table WHERE family = '1' AND type = 'B1'";
$result = mysql_query($query);
$array = mysql_fetch_array($result);
echo '(', implode(',',$array) ,')';

但收到以下结果: (1,1) 这是我没想到的。

我以为会显示 (1,18546269,51534064)。 然后我写了以下代码来验证应该显示什么:

print_r ($array);

并对这些值感到非常惊讶:

Array ( [0] => 1 [id] => 1 ).

最后我写道:

while($array = mysql_fetch_array($result)) 
        echo $array['id'],',';

正如预期的那样:

1,18546269,51534064,

我不能使用它,因为我需要一个完全一样的字符串:(1,18546269,51534064)。 事实上,我“只是”需要一个变量,它可以为我在 phpMyAdmin 中运行的 SQL 查询提供相同的值。 我真的很困惑,如果你们中的一个可以帮助我,那就太好了。 mysqli 的解决方案也将不胜感激。 :-)

【问题讨论】:

【参考方案1】:
$query = "SELECT id FROM table WHERE family = '1' AND type = 'B1'";
$result = mysqli_query($link, $query);
$ids = '';
while($row = mysqli_fetch_array($result)) $ids .= $row['id'].',';

// Filter the text a bit
$ids = rtrim($string, ',');
$ids = '('.$ids.')';
echo $ids;

你基本上是初始化一个变量,把所有的 id 放进去,去掉最后一个逗号,加上括号,就是这样。

【讨论】:

这就是为什么我说mysqli解决方案会受到赞赏。谢谢你的回答! @user3499881 编辑到 MySQLi 它有效,但我们必须更改 $ids = rtrim($string, ',');有了这个: $ids = rtrim($ids, ',');不幸的是,我没有 15 分的声望来投票!一旦我达到这个目标,你就会收到我的投票。 ;-)【参考方案2】:

mysql_fetch_array() 中所述:

返回值

返回对应于获取行的字符串数组,如果没有更多行,则返回FALSE。返回数组的类型取决于result_type 的定义方式。通过使用MYSQL_BOTH(默认),您将获得一个包含关联索引和数字索引的数组。

[ deletia ]

示例 #2 mysql_fetch_array() 与 MYSQL_NUM

<?php
mysql_connect("localhost", "mysql_user", "mysql_password") or
    die("Could not connect: " . mysql_error());
mysql_select_db("mydb");

$result = mysql_query("SELECT id, name FROM mytable");

while ($row = mysql_fetch_array($result, MYSQL_NUM)) 
    printf("ID: %s  Name: %s", $row[0], $row[1]);  


mysql_free_result($result);
?>

也就是说,该函数只返回一行,默认情况下作为一个数组,由结果集中的关联列和数字索引列组成。您希望使用合适的result_type 参数多次调用该函数(如上所示)。

【讨论】:

感谢您的回答,但使用 while($array = mysql_fetch_array($result, MYSQL_NUM)) printf($array['0'].',');给我以下结果 18546269,51534064,第一条记录不知何故没有出现。顺便说一句,我怎么能把它用作变量呢?【参考方案3】:

mysql_fetch_array 获取行数组,而不是列数组。这意味着,如果您有 ID 和名称,则获取的数组将在每一行包含一个 id 和一个名称。

对您的代码进行相当简单的修改即可解决问题

$i=0;
$data=array();
while($array = mysql_fetch_array($result)) 
     $data[$i]=$array['id'];
     $i++;

echo '(', implode(',',$data) ,')';

【讨论】:

您忘记增加 $i.. 请添加它,以便我支持您的答案。 @ChosenWann 谢谢,抱歉。 我们必须修复以下问题:$data[$i]=$array['id']; (在 i 之前缺少 $)但现在我只收到选择的最后一条记录。 (51534064) @user3499881 已编辑。您是否使用 $i++ 添加了下一行?我稍后添加它(在之前的评论之后),所以这可能是只显示最后一条记录的问题。 现在我也用 $i++ 写了,看起来更好。但它没有显示第一条记录。我修改了查询(现在没有 type=B1)以接收更多值,现在我们有 12 个值,但第一条记录仍然丢失。

以上是关于mysql_fetch_array 不呈现 SQL 查询的期望值的主要内容,如果未能解决你的问题,请参考以下文章

mysql_fetch_row , mysql_fetch_array , mysql_fetch_assoc 的区别

mysql查询的一个字段并循环出来的数据,能加在一起吗?

php while循环和foreach循环 mysql_fetch_array()

mysql_fetch_row,mysql_fetch_array,mysql_fetch_assoc的区别

mysql_fetch_array() 期望参数 1 是资源问题 [重复]

从mysql转换为mysqli(mysql_fetch_array)[重复]