2011-05-23 91 views
1

可能重複:
mysql_fetch_array() expects parameter 1 to be resource, boolean given in selectPHP打印MySQL數據)

我拖的MySQL數據庫。第一個數據庫的位置是latin1_swedish_ci,第二個數據庫的位置是utf_unicode_ci.I我試圖用下面的php代碼讀取數據庫。

<?php 
mysql_connect("localhost","admin","***"); 
mysql_select_db("MyDB"); 
$sql=mysql_query("select * from menu where avail=1"); 
while($row=mysql_fetch_assoc($sql)) 
$output[]=$row; 
print(json_encode($output)); 
mysql_close(); 
?> 

當我通過我的PHP服務器乳寧這個代碼的第一個數據庫中的一個與latin1_swedish_ci是readed但是當我想讀它會顯示以下信息,第二個:

"Warning: mysql_fetch_assoc() expects parameter 1 to be resource, boolean given in...." 
"Notice: Undefined variable: output in...." 

我試圖給予 mysql_query(「SET NAMES utf8;」); 在我的代碼,但它沒有工作 任何人都可以告訴我這裏怎麼了?

+1

*注意:未定義的變量:輸出在.... * ...爲什麼你檢查錯誤信息? – 2011-05-23 17:22:04

+3

在這種情況下無關緊要;這很明顯,爲什麼這個通知被拋出。 – ThiefMaster 2011-05-23 17:23:55

+0

如果$ sql是一個布爾值(假),那意味着有一個SQL錯誤。在執行查詢後添加'echo mysql_error()'以查看出了什麼問題。 – 2011-05-23 17:24:08

回答

-1

嘗試的mysql_fetch_array代替mysql_fetch_assoc

還要定義$output使用前:

所有的
$output = array(); 
while($row=mysql_fetch_array($sql)) 
    $output[]=$row; 
+0

@downvoter,謹慎解釋? – Neal 2011-05-23 17:21:40

+0

是:'mysql_fetch_assoc()'返回一個關聯數組,而'mysql_fetch_array()'返回一個包含關聯索引和數字索引的數組。所以它不僅擴張了他的json,而且增加了他可能不需要的數據。 – ThiefMaster 2011-05-23 17:23:32

+0

它是一樣的東西 – George32x 2011-05-23 17:26:41

1

首先,你應該在循環之前添加$output = array();

然後,修復您的查詢,使其不會失敗。如果mysql_query()返回布爾值(false),則表示查詢失敗。

您可以添加一個醜陋的結構,看看它爲什麼失敗:

$sql=mysql_query("select * from menu where avail=1") or die(mysql_error()); 
1

你必須在你的查詢時出現錯誤。導致此行的錯誤:

$sql=mysql_query("select * from menu where avail=1"); 

返回false。此錯誤時,饋送到下一行:

while($row=mysql_fetch_assoc($sql)) 

引發第一個錯誤。這段時間被跳過,因此這條線從未被執行:

$output[]=$row; 

因此第二個警告。

添加mysql_error()您mysql_ *後聲明這樣 ,使這個習慣

mysql_connect("localhost","admin","***") or die(mysql_error()); 
. 
. 
. 
mysql_select_db("MyDB") or die(mysql_error()); 
. 
. 
. 
$sql=mysql_query("select * from menu where avail=1") or die(mysql_error()); 

這些的die(mysql_error())聲明顯示錯誤消息後終止腳本。儘管可能會也可能不需要在mysql錯誤上使腳本死亡,但大多數人仍然這樣。而不是使用die語句,您可以檢查返回值,並在必要時終止腳本。

您的案例中的錯誤似乎是在數據庫選擇線。可能是您在mysql_select_db中指定的數據庫名稱不正確,或者您可能沒有權限讀取該數據庫(與給定用戶名/密碼建立連接並不意味着該用戶可以讀取所有數據庫)。發佈錯誤消息(再次)。

+0

它prinds「沒有選擇數據庫」 – George32x 2011-05-23 17:36:02

+0

我編輯了我的答案。您可能在'mysql_select_db()'語句中輸入了錯字,或者您沒有權限讀取數據庫。可能還有其他不尋常的原因。 – 2011-05-24 04:20:28