• ベストアンサー

mysql_num_rowsなどのWarningの原因がわからない

以下のプログラム、何が誤っているのでしょうか。 違う箇所で使ったPHPの使いまわし(そちらは問題なく動いている) なのですが、サーバー上で実行しても Warning: mysql_num_rows(): supplied argument is not a valid MySQL result ... Warning: mysql_free_result(): (以下同上) となり、どうしても原因が究明できません。。 以下、省略してますが、本質は変わりません。SQL文($sql)を phpMyAdminで通すとなんら問題なく問い合わせ結果が得られます。 <?php  $con = mysql_connect(localhost, username, pss);  $selectdb = mysql_select_db(mydb, $con);  $sql = "SELECT Kaisya FROM MYTABLE";  $rst = mysql_query($sql, $con);  $recmax = mysql_num_rows($rst);//■←この行がWarning■  $body = "<table border='1'>";  $body .= "<tr>";  $body .= "<td style=\"text-align: center;\">会社名</td>";  for ($recnum = 0; $recnum < $recmax; $recnum++) {   $col = mysql_fetch_array($rst);   $body .= "<tr>";   $body .= "<td>" . $col['Kaisya'] . "</td>";   $body .= "</tr>";  }  $body .= "</table>";  mysql_free_result($rst);//■←この行がWarning■  $con = mysql_close($con); ?> <html><head></head><body> <?= $body ?> </body></html>

質問者が選んだベストアンサー

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.4

$selectdb = mysql_select_db($DBNAME, $con); の下に if(!$selectdb) die("エラー". mysql_error()); と書いてデバッグしてみてはいかがでしょうか? 結局#1でも書いたとおり記述ミスなどで DBが選ばれてないのだとおもいますが・・・ phpMyAdminはDB自体を選んだ上でSQLを実行する のでPHP上でDBが選ばれてない場合とは単純比較 はできないと思います。

litton101
質問者

お礼

解決しました・・ みなさんがおっしゃるように、 $DBSERVER = "localhost"; $DBUSER = "これと"; $DBPASSWORD = "これが"; $DBNAME = "mydb"; 違ってました(恥) やっぱりこういうものは、疑いから入らないとダメですね。 勘違いと思い込みが強すぎて、プログラムのせいにばかりしてました。 同時に、物事がうまくいかないのには必ず理由があることもわかりました。 本当にありがとうございました。

その他の回答 (3)

  • php504
  • ベストアンサー率42% (926/2160)
回答No.3

デバッグするならエラーを表示させましょう $con = mysql_connect($DBSERVER, $DBUSER, $DBPASSWORD) or die("コネクト失敗"); $rst = mysql_query($sql, $con) or die("クエリ($sql)が変<br>\n".mysql_error());

litton101
質問者

お礼

php504さん、ありがとうございました。 こんなすごいことができるのですか。すごいですね。 ご教示のデバッカを仕込んだら、冒頭のWarningはでなくなって クエリ(SELECT Kaisya FROM MYTABLE)が変 No Database Selected とメッセージが変わりました。が、どうにも原因わかりません・・ 元質問にも書きましたが「SELECT Kaisya FROM MYTABLE」を phpMyAdminから実行するとなんら問題なく結果が得られるものですから。。。

  • Mac10
  • ベストアンサー率44% (17/38)
回答No.2

>どうしても原因が究明できません。  御自分で、どこまでテストしたのか書かないと教える方の二度手間になりますので、できれば書いた方が良いかと。  確認ですけど、エラーが出る以前の処理の返り値はチェックしましたか?      

litton101
質問者

お礼

Madc10さん、レスありがとうございました。 平成17年度のディレクトリにあったシステム(というほどのものでないですけど)を 平成18年用のディレクトリを新設してそっくりファイルをコピーしただけなんです。 変わったところといえば 平成17年度は、mydb17というデータベースだったのに対し、 今回はmydb18みたいに変わっただけなので(テーブル構造等は同一) そのまま使えるものと期待しますが。 ちなみに、業者さんが作ったシステムに自前で作った集計PHPスクリプトを 使っているものです。mydb18はその業者さんが設置したもので、 本来の機能はもちろん使えています。

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

mysql_select_db(mydb, $con); は'mydb'や$mydbでなくてもよいのですか? 単純にデータベースファイルが認識されていない のかもしれません。

litton101
質問者

補足

yamabejpさん、いつもお世話になってます。 すみません、サンプルの書き方の方が正しくなかったですね。 本番環境は下記のようになっておりますので、 ご示唆された件は問題ないと思います。 --------------------------------dbini.php <?php $DBSERVER = "localhost"; $DBUSER = "username"; $DBPASSWORD = "pss"; $DBNAME = "mydb"; ?> --------------------------------list.php //データベース関連データのインクルード require_once("../dbini.php"); //MySQLに接続 $con = mysql_connect($DBSERVER, $DBUSER, $DBPASSWORD); //データベース選択 $selectdb = mysql_select_db($DBNAME, $con);