【问题标题】:mysql_fetch_array return only one rowmysql_fetch_array 只返回一行
【发布时间】:2011-08-09 18:49:19
【问题描述】:

好的,我有以下代码:

$array = mysql_query("SELECT artist FROM directory WHERE artist LIKE 'a%' 
        OR artist LIKE 'b%' 
        OR artist LIKE 'c%'");
    $array_result= mysql_fetch_array($array);

然后,当我尝试回显内容时,我只能回显$array_result[0];,它输出第一项,但如果我尝试回显$array_result[1];,我会得到一个未定义的偏移量。

但是,如果我通过 PHPMyAdmin 运行上述查询,它会返回一个包含 10 个项目的列表。为什么这不被识别为 10 个项目的数组,让我回显 0-9?

感谢您的帮助。

【问题讨论】:

  • 我知道% 是常用的通配符,但您是否尝试过改用*

标签: php mysql fetch


【解决方案1】:

这是因为数组代表返回结果集中的一行。您需要再次执行mysql_fetch_array() function 才能获得下一条记录。示例:

while($data = mysql_fetch_array($array)) {
  //will output all data on each loop.
  var_dump($data);
}

【讨论】:

  • 非常感谢。奇怪的是,当我使用它时,它没有得到第一行数据的值。 IE。假设第一位艺术家是 Apple,第二位是 Banana,第三位是 Cantaloupe。当我转储时,它只是香蕉 -> 哈密瓜 -> 等等,没有苹果。
  • @Ando:当您使用 PMA (PhpMyAdmin) 时,它会得到“苹果”吗?可能是:(1)您的 php 生成的 SQL 查询没有适当地过滤记录。 (2) 你不是ORDER BY,而是你LIMIT,因此过滤时可能会留下'apple'的记录。
  • 我的 SQL 查询确实带回了 Apple,我按艺术家 ASC 进行排序。奇怪的是,如果我按 desc 订购,那么它会在底部显示 Apple,但是它缺少应该首先出现的项目......非常奇怪
  • 另外,如果我使用while(list($artist) = mysql_fetch_array($result)) { echo $artist; },列表仅显示项目 1-9 而不是 0-9。
  • 尝试发布确切的代码、表描述 (SHOW TABLE STATUS LIKE "tbl_name"; DESCRIBE tbl_name;) 和输出,我们会尝试看看问题出在哪里。
【解决方案2】:

您应该使用while 来获取所有数据。

$array_result = array();
while ($row = mysql_fetch_array($array, MYSQL_NUM)) {
    $array_result[] = $row;
}
echo $array_result[4];

【讨论】:

  • 数据无论如何都存储在 PHP 的内存空间中。复制这些数据通常是没有用的。
  • @Dor 我看不出将数据移动到数组中是如何无用的。您还打算如何访问数据?假设您想要这两行,您将无法在 while 循环的同一迭代中同时获得这两行,因此最好先将数据复制到可用的数组中。
  • @DaveChen 我认为你是对的。这感觉像是php的一个缺点。
【解决方案3】:

我更喜欢使用此代码:

$query  = "SELECT artist FROM directory WHERE artist LIKE 'a%' 
        OR artist LIKE 'b%' 
        OR artist LIKE 'c%'";           
$result = mysql_query($query) or die(mysql_error());


while(list($artist) = mysql_fetch_array($result))
{
echo $artist;
}

如果您在查询中添加更多字段,只需将更多变量添加到 list($artist,$field1,$field2, etc...)
希望对你有帮助:)

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-11-06
  • 2011-05-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多