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 的区别
php while循环和foreach循环 mysql_fetch_array()
mysql_fetch_row,mysql_fetch_array,mysql_fetch_assoc的区别