請教一下關於MYSQL內建函數使用問題

edited 十月 2013 in PHP新手區
請教一下各位大大
目前遇到個奇怪的情形
跑程式的時候MYSQL的內建資料庫函數無法使用
會出現以下的錯誤訊息
mysql_fetch_row(): supplied argument is not a valid MySQL result resource in c:\AppServ\www\select.php on line 19

php_mysql.dll也確定有開啟了
服務裡面的MYSQL狀態也是開啟的
PhpAdmin也運作正常
用PHP INFO看MYSQL的狀態是
MySQL Support enabled
Active Persistent Links 0
Active Links 0
Client API version 3.23.57

我是安裝APP SERVER 的也重新單獨再安裝一次MYSQL過了

請問各位大大有什麼地方我沒注意到的或者是需要更改的嗎

原始討論: http://twpug.net/x/modules/newbb/viewtopic.php?topic_id=1903

評論

  • edited 八月 2006
    通常我出現這個原因大多是因為沒給mysql_fetch_row()資料
    然後我會把sql拿去mysql裡面執行一次,大部份都是sql有問題
    不曉得你的狀況是否和之前我碰到的一樣,可以trytry看
  • edited 八月 2006
    treble 說的很正確, 絕大部分的情況是 sql 有語法問題, mysql_query 產生錯誤沒有送回 result set, 若果不作檢查便呼叫 mysql_fetch_row, 便會發生你所說的情況.

    好的程式必須每次呼叫 mysql_query (或類似的數據庫操作) 後檢查有否錯誤, 才進行下一步工作.
  • edited 八月 2006
    謝謝兩位已經解決了 不過在結果出現時還是都會出現

    Warning: mysql_db_query() [http://www.mysql.com/doc]: Your query requires a full tablescan (table cc931, 247 rows affected). Use EXPLAIN to optimize your query. in c:\AppServ\www\select.php on line 18

    此類的訊息

    這是指程式 裡面需要再加入什麼定義的部分嗎
    程式如下:
    $mysql_server_name = "localhost";
    $mysql_username = "piggymiler";
    $mysql_password = "****";
    $mysql_database = "gimmy";

    $sql = "select * from cc931";

    //

    $conn=mysql_connect( $mysql_server_name, $mysql_username, $mysql_password );
    $result=mysql_db_query( $mysql_database, $sql,$conn );
    $row=mysql_fetch_row($result);
  • edited 八月 2006
    Your query requires a full tablescan (table cc931, 247 rows affected). Use EXPLAIN to optimize your query. in c:\AppServ\www\select.php on line 18

    難上面這段去翻譯一下吧,你的SQL語法被警告會造成表格全面掃描的狀態,會造成效能低落,可能是你沒有設定好 index 或是 sql 語法下的太差。

    而你可以用 EXPLAIN 檢查語法那裡有問題....

    如果你不知道怎麼用 EXPLAIN ,麻煩請用 Google 查一下.....
    或是看看 dev.mysql.com 上得文件吧~
  • edited 八月 2006
    有加索引嗎,建議加一下,有主鍵也加一下好
    另外如果你知道你想抓幾筆資料出來,最好也加進sql裡
    例如5筆資料那就是
    select * from tablename limit 5
    另外如果你只想抓資料表特定欄的資料,最好也加進sql裡
    例如只想抓資料表裡的id及name這欄
    select id,name tablename limit 5
    對效能而言多少都會有點幫助
  • edited 八月 2006
    對於結構像 select * from table_name 的 SQL statement 來說,是否加上 primary key 或者 index 都不會有幫助,所以 piggymiler 不用理會這項警告。

    這項警告只是說你的 SQL statement 將會被執行得很沒有效率,正如 Darkhero 所說,一般解決的辦法是在適當的欄位製作 index,與及改善 SQL statement 的結構,具體的改善方法必須透過 Explain 來檢查,你對數據庫的原理熟悉的話也可以自行優化。

    但是你的 SQL statement 實在簡單得不可能再優化,加上裡面沒有任何 where, group by, order by 等子句,製作任何 index 都沒有意義。
  • edited 八月 2006
    如果程式碼就是這樣,恐怕無法執行吧?
    一般不是要配合while , for 迴圈來讀取資料嗎?
  • edited 八月 2006
    weichang 寫道:
    如果程式碼就是這樣,恐怕無法執行吧?
    一般不是要配合while , for 迴圈來讀取資料嗎?

    還是可以執行,只是挖了兩百多筆資料,只用第一筆...
  • edited 八月 2006
    比較像是,殺雞用牛刀。
    但是絕對不等於『一頭牛只做六客』喔∼
Sign In or Register to comment.