PHP:警告:sort()期望参数1是数组,给定资源

时间:2011-05-29 17:13:39

标签: php mysql

我想用sort()函数排列表列表数组,但我得到同样的警告  我的代码如下:

 <?PHP 
     require_once("lib/connection.php"); 

     $result = mysql_query("SHOW TABLES FROM `st_db_1`");

     sort($result);
     foreach ($result as $result){
     echo $result ;
     } 
 ?>

我得到的警告是:

Warning: sort() expects parameter 1 to be array, resource given in C:\wamp\www\Copy (4)       of st_db_1\test_2.php on line 9
Warning: Invalid argument supplied for foreach() in C:\wamp\www\Copy (4) of st_db_1\test_2.php on line 10

5 个答案:

答案 0 :(得分:2)

警告非常明确:mysql_query不返回包含查询结果的数组,而是返回资源。您需要像mysql_fetch_array()这样的函数来返回所需的数据(并且可以在其上执行排序操作)。

有关mysql_query() http://nl3.php.net/mysql_query

的使用,请参阅手册

也许不相关,但您可以通过在查询中添加ORDER BY <fieldname>来立即在MySQL中对结果进行排序。

答案 1 :(得分:2)

我没有提供可以想象的最有效的代码,但这应该清楚说明发生了什么并解决了你的问题:

 $result = mysql_query("SHOW TABLES FROM `st_db_1`");

 $my_array_of_table_names = array();
 while ( $row = mysql_fetch_array($result, MYSQL_NUM)) {
     $my_array_of_table_names[] = $row[0];
 }
 sort($my_array_of_table_names);

 foreach ($my_array_of_table_names as $table_name){
     echo "$table_name\n";
 }

答案 2 :(得分:2)

变量$ result只是结果类型的资源。您需要从结果集中获取数据,例如, mysql_fetch_assoc()

$result = mysql_query("SHOW TABLES FROM `st_db_1`");
$array = array();
while ($row = mysql_fetch_assoc($result)) {
    $array[] = $row["Tables_in_st_db_1"];
}
sort($array);
foreach ($array as $item) {
   echo $item;
}

答案 3 :(得分:1)

您的问题是您实际上并未从查询中获取数据。

mysql_query()不会为您提供记录集。

它的作用是查询数据库并返回一个数据库资源,然后您可以使用它来获取数据。

您需要的是在致电mysql_query()之后,您还需要致电mysql_fetch_array()或类似的人。 (有一系列功能可用,但在这种情况下可能是最好的功能)。然后sort()来自$result的数据,而不是{{1}}。

答案 4 :(得分:0)

它清楚地说:它需要一个数组,你传递其他东西。

如果你已经检查了$result的类型,你会发现它不是一个数组,那就是一个资源。