【進來請嚴肅】從mysql取資料時提示Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result
如題,這個問題我上百度,google查詢了無數,多少是因為sql查詢語句錯誤,查不到資料導致。其中有個人,怎麼說呢,感覺這人在故意誤導別人,到處告訴別人在mysql_fetch_array加個@來屏蔽錯誤資訊,其實問題根本沒解決,僅僅是不提示錯誤而已。下面是代碼
$conn=mysql_connect("localhost","test","test");
echo $conn."
";//此處列印結果為:Resource id #1
mysql_select_db("test")
$r=mysql_query("select * from table1 where id > 0",$conn);
if($r==false) echo "query error";//此處列印結果為:query error
else
{
while ($row=mysql_fetch_array($r,MYSQL_ASSOC))
{
$rows[]=$row;
}
}
其實,這個程式,我在本地是可以啟動並執行,可傳到houstmonster虛擬機器上就不行了,為調試,我把程式簡化成上面的樣子,可還是不行,執行query查詢後,一直返回false,取資料時就報錯,Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result
我用phpMyadmin連上伺服器,執行select * from table1 where id > 0是沒有問題的。
請高手指點,我是初學php,從c#轉過來的。
------解決方案--------------------
$r=mysql_query("select * from table1 where id > 0",$conn);
你是不是寫反了:$r=mysql_query($conn,"select * from table1 where id > 0");
while ($row=mysql_fetch_array($r,MYSQL_ASSOC))
MYSQL_ASSOC?需要這個嗎?直接while ($row=mysql_fetch_array($r))不可以嗎?為什麼你的寫法和我的不一樣了~~~~
------解決方案--------------------
建議多看下手冊,學會看手冊,大多數問題就可以自己搞定了.
------解決方案--------------------
上傳到伺服器要改使用者名稱和密碼
PHP code
$conn=mysql_connect("localhost","test","test") or die('聯結不成功'); mysql_select_db("test"); //注意分號$r=mysql_query("select * from table1 where id > 0",$conn) or die("查詢不成功"); if(mysql_num_rows($r)>0){ //如果有記錄則執行 while ($row=mysql_fetch_array($r)) { $rows[]=$row['欄位']; } }
------解決方案--------------------
探討
$r=mysql_query("select * from table1 where id > 0",$conn);
你是不是寫反了:$r=mysql_query($conn,"select * from table1 where id > 0");
while ($row=mysql_fetch_array($r,MYSQL_ASSOC))
MYSQL_ASSOC?需要這個嗎?直接while ($row=mysql_fetch_array($r))不可以嗎?為什麼你的寫法和我的不一樣了~~~~
------解決方案--------------------
MYSQL_ASSOC,應該是將行返回為管理數組,欄位名表示鍵,而欄位內容表示值。樓主說,你是在空間上執行錯誤,你確定你在資料庫的配置上沒有問題嗎?
另外我通常是使用mysqli擴充來操作的。mysql_fetch_array是不是php4的寫法啊?mysql_fetch_array($query);
------解決方案--------------------
我以前也遇到加@ 出錯,但是我後來發現。如果要加就要全部加,要麼全部不加。加個別兩個就會報錯。
5樓的代碼已經寫的很清楚了。lz再多看看手冊吧
------解決方案--------------------
返回數組為false
這種情況我遇到過一回,不過是別人說access的.
建議查看伺服器和本地的mysql版本,以及建庫語句是否一致.
while ($row=mysql_fetch_array($r,MYSQL_ASSOC))
問題可能就出在你加的哪個參數MYSQL_ASSOC,其實你直接$row=mysql_fetch_array($r),預設是兩種數字索引和欄位索引都存在,然後print_r($row)查看伺服器是否支援欄位名索引.
------解決方案--------------------
探討
返回數組為false
這種情況我遇到過一回,不過是別人說access的.
建議查看伺服器和本地的mysql版本,以及建庫語句是否一致.
while ($row=mysql_fetch_array($r,MYSQL_ASSOC))
問題可能就出在你加的哪個參數MYSQL_ASSOC,其實你直接$row=mysql_fetch_array($r),預設是兩種數字索引和欄位索引都存在,然後print_r($row)查看伺服器是否支援欄位名索引.
------解決方案--------------------
呵呵,沒遇到問題的時候你可能永遠不會相信,調試一下就知道為什麼了!
------解決方案--------------------
探討