みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

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>

投稿日時 - 2006-04-05 14:27:08

QNo.2073116

暇なときに回答ください

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

$selectdb = mysql_select_db($DBNAME, $con);
の下に
if(!$selectdb) die("エラー". mysql_error());
と書いてデバッグしてみてはいかがでしょうか?
結局#1でも書いたとおり記述ミスなどで
DBが選ばれてないのだとおもいますが・・・

phpMyAdminはDB自体を選んだ上でSQLを実行する
のでPHP上でDBが選ばれてない場合とは単純比較
はできないと思います。

投稿日時 - 2006-04-06 20:01:10

お礼

解決しました・・
みなさんがおっしゃるように、

$DBSERVER = "localhost";
$DBUSER = "これと";
$DBPASSWORD = "これが";
$DBNAME = "mydb";

違ってました(恥)

やっぱりこういうものは、疑いから入らないとダメですね。
勘違いと思い込みが強すぎて、プログラムのせいにばかりしてました。

同時に、物事がうまくいかないのには必ず理由があることもわかりました。

本当にありがとうございました。

投稿日時 - 2006-04-07 16:53:58

ANo.4

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(4)

ANo.3

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

投稿日時 - 2006-04-06 09:51:57

お礼

php504さん、ありがとうございました。
こんなすごいことができるのですか。すごいですね。

ご教示のデバッカを仕込んだら、冒頭のWarningはでなくなって

クエリ(SELECT Kaisya FROM MYTABLE)が変
No Database Selected

とメッセージが変わりました。が、どうにも原因わかりません・・

元質問にも書きましたが「SELECT Kaisya FROM MYTABLE」を
phpMyAdminから実行するとなんら問題なく結果が得られるものですから。。。

投稿日時 - 2006-04-06 17:44:27

ANo.2

>どうしても原因が究明できません。

 御自分で、どこまでテストしたのか書かないと教える方の二度手間になりますので、できれば書いた方が良いかと。

 確認ですけど、エラーが出る以前の処理の返り値はチェックしましたか?
 
 
 

投稿日時 - 2006-04-05 23:42:58

お礼

Madc10さん、レスありがとうございました。

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

ちなみに、業者さんが作ったシステムに自前で作った集計PHPスクリプトを
使っているものです。mydb18はその業者さんが設置したもので、
本来の機能はもちろん使えています。

投稿日時 - 2006-04-06 17:46:54

ANo.1

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

投稿日時 - 2006-04-05 15:34:14

補足

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);

投稿日時 - 2006-04-05 17:00:10

あなたにオススメの質問