2011-05-29 67 views
1

我想表列表与sort()函数的阵列排列,但我得到同一种警告 我的代码如下:PHP:警告:排序()预计参数1是数组,资源给予

<?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 
+4

您需要首先[获取](http://php.net/manual/en/function.msql-fetch-array.php)结果。例如。使用'$ row = mysql_fetch_array($ result):' – 2011-05-29 17:16:10

+2

您需要查找'mysql_query'返回的内容以及'mysql_fetch_assoc'。顺便说一下,您需要使用'print_r'而不是'echo'来查看结构。 – 2011-05-29 17:17:24

+1

在你的foreach循环中,你覆盖了'$ result'变量,这可能不是你想要的。 – judda 2011-05-29 17:26:29

回答

1

上面清清楚楚地写着:预计一个数组,你通过别的东西。

如果您检查了$result的类型,您将会看到它不是数组,而是一个资源。

+0

我检查了一下,它的一个数组,如果表名,但我成功能够使用while循环获取数组表 – ravi 2011-05-29 17:21:35

2

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

请参阅本手册的使用mysql_query()http://nl3.php.net/mysql_query

也许无关,但你可以在MySQL的结果马上加入ORDER BY <fieldname>到您的查询排序。

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"; 
} 
+0

是的,移动到正确的地方。这就是我在发布之前未进行测试的结果。呃,现在就去测试一下,以确保我不会让事情变得更糟。 – Trott 2011-05-29 17:32:24

+0

没问题,主要问题是询问此问题的人没有获取行。你展示了这一点。现在我们有了几乎相同的答案。我给了你一个观点,稍后可能会删除我的答案,因为它们太相似了。 – 2011-05-29 18:02:21

1

你的问题是,你实际上并没有得到来自数据查询。

mysql_query()不会给你一个记录集。

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

您需要的是在致电mysql_query()之后,您还需要拨打mysql_fetch_array()或类似号码。 (有一系列可用的功能,但这可能是在这种情况下使用的最好的功能)。然后从sort()的数据,而不是$result

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; 
} 
相关问题