2011-05-29 66 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; 
} 
相關問題