- ベストアンサー
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>
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
$selectdb = mysql_select_db($DBNAME, $con); の下に if(!$selectdb) die("エラー". mysql_error()); と書いてデバッグしてみてはいかがでしょうか? 結局#1でも書いたとおり記述ミスなどで DBが選ばれてないのだとおもいますが・・・ phpMyAdminはDB自体を選んだ上でSQLを実行する のでPHP上でDBが選ばれてない場合とは単純比較 はできないと思います。
その他の回答 (3)
- php504
- ベストアンサー率42% (926/2160)
デバッグするならエラーを表示させましょう $con = mysql_connect($DBSERVER, $DBUSER, $DBPASSWORD) or die("コネクト失敗"); $rst = mysql_query($sql, $con) or die("クエリ($sql)が変<br>\n".mysql_error());
お礼
php504さん、ありがとうございました。 こんなすごいことができるのですか。すごいですね。 ご教示のデバッカを仕込んだら、冒頭のWarningはでなくなって クエリ(SELECT Kaisya FROM MYTABLE)が変 No Database Selected とメッセージが変わりました。が、どうにも原因わかりません・・ 元質問にも書きましたが「SELECT Kaisya FROM MYTABLE」を phpMyAdminから実行するとなんら問題なく結果が得られるものですから。。。
- Mac10
- ベストアンサー率44% (17/38)
>どうしても原因が究明できません。 御自分で、どこまでテストしたのか書かないと教える方の二度手間になりますので、できれば書いた方が良いかと。 確認ですけど、エラーが出る以前の処理の返り値はチェックしましたか?
お礼
Madc10さん、レスありがとうございました。 平成17年度のディレクトリにあったシステム(というほどのものでないですけど)を 平成18年用のディレクトリを新設してそっくりファイルをコピーしただけなんです。 変わったところといえば 平成17年度は、mydb17というデータベースだったのに対し、 今回はmydb18みたいに変わっただけなので(テーブル構造等は同一) そのまま使えるものと期待しますが。 ちなみに、業者さんが作ったシステムに自前で作った集計PHPスクリプトを 使っているものです。mydb18はその業者さんが設置したもので、 本来の機能はもちろん使えています。
- yambejp
- ベストアンサー率51% (3827/7415)
mysql_select_db(mydb, $con); は'mydb'や$mydbでなくてもよいのですか? 単純にデータベースファイルが認識されていない のかもしれません。
補足
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);
お礼
解決しました・・ みなさんがおっしゃるように、 $DBSERVER = "localhost"; $DBUSER = "これと"; $DBPASSWORD = "これが"; $DBNAME = "mydb"; 違ってました(恥) やっぱりこういうものは、疑いから入らないとダメですね。 勘違いと思い込みが強すぎて、プログラムのせいにばかりしてました。 同時に、物事がうまくいかないのには必ず理由があることもわかりました。 本当にありがとうございました。