dポイントプレゼントキャンペーン実施中!

現在、PHPでMySQLの操作をテストしています。
Vista上にXAMPPをインストールした環境とXP上にApache,PHPとMySQLを個別にインストールした環境とで検証しています。

どちらの環境でも、テーブルにデータをインサートするところまでは出来ました。
mysql_fetch_array()関数を使ってSQLの実行結果を表示させるところで、XAMPPでは結果を表示できるのですが、個別インストール環境では
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in D:\****\incert.php on line 8
が出てしまいます。
mysql_error()でエラーを表示させたところ
No database selected
と表示されます。
mysql_select_db("db_name");
でDBはせんたくされていると思う(事実、XAMPPでは選択されている)のですが、何が問題なのでしょうか?

A 回答 (3件)

#1です。


windows(vista)、linux(centos)で試してみましたが、個別インストール
した環境でも特に問題なくデータが表示されます。

> mysql_fetch_array()関数を使ってSQLの実行結果を表示させるところ
> で、XAMPPでは結果を表示できるのですが、個別インストール環境では
> Warning: mysql_fetch_array(): supplied argument is not a valid
> MySQL result resource in D:\****\incert.php on line 8
> が出てしまいます。

いくつか試したところでは存在しないデータベース名を指定した場合にも
そのメッセージが出るので、まずはデータベースの環境を第一に調べて
見てください。

#2さんも書かれていますが、コマンドラインツールで該当のデータベース
に接続・選択が出来ますか?

この回答への補足

> いくつか試したところでは存在しないデータベース名を指定した場合にも
そのメッセージが出るので、まずはデータベースの環境を第一に調べて
見てください。
わかりました。
コマンドラインツールでは確認出来ては居るんです。
でも、その辺が一番怪しいということですね。
ありがとうございます。

補足日時:2009/05/01 15:35
    • good
    • 0

register_globalsは、今回の問題には関係しないけど、セキュリティ上OFFの方がよいです。


まずは、XAMPPでのphpinfo()出力と、個別インストール環境でのphpinfo()出力とをとっくりと見比べるのが早道かな。特にmysqlの項目。
あと、MySQL側では、今回使用しているユーザーへのgrant 設定はどのように行ったのでしょう?select権限を忘れていたりとか、実は、インサートを行った時と違うユーザーだったり?
「データをインサート」はphpから行ったのですよね?その時の、mysql_select_dbしたのと同じデータベースなのかとか?
また、個別インストール環境の方で、コマンドラインクライアントから、今回使用しているユーザーでのMySQL接続と、その該当データベースを開くことは出来ているのでしょうか?
個別インストールでどういう手順を踏んだかは、こちらでは、知りようがないので、何から何まで疑って掛かることになりそう。
それぞれのphpやMySQLのバージョンも書いて貰った方がよいかも。

この回答への補足

まずバージョンですが、

xampp
PHP Version 5.2.4
Apache 2.2.6
MySQL 5.0.45

個別
PHP Version 5.2.9-2
Apache 2.2.11
MySQL 5.1.33

です。
phpinfo()で出力してみましたが、個別設定の方がDocRootのパスなど設定がきちんとなされているのに対してxamppはデフォルトのままなのでno valueとなっていたりしますが、基本的な部分は差異は無いように見受けられます。

> register_globalsは、今回の問題には関係しないけど、セキュリティ上OFFの方がよいです。
の件ですが、いずれは対処していかなければならないと思っていますが、現状では初心者なのでローカルPC上での動作確認が先決問題です。
grant設定に関しても同様の理由で設定しておらず、rootにてログインして検証しています。なので、他ユーザでログインすることもありません。

> 「データをインサート」はphpから行ったのですよね?その時の、mysql_select_dbしたのと同じデータベースなのかとか?
インサートはphpからです。
家庭内LANでデータをコピーしながらテストしているので、ソースが違っていることは考えられませんし、できないのはmysql_fetch_array()でブラウザに表示させるところで、mysql_fetch_array()部分を削除してMySQLへの入力だけなら動作確認で来ていることから、参照しているのは同一DBだと思います。

> また、個別インストール環境の方で、コマンドラインクライアントから、今回使用しているユーザーでのMySQL接続と、その該当データベースを開くことは出来ているのでしょうか?
これも出来ています。

> 個別インストールでどういう手順を踏んだかは、こちらでは、知りようがないので、何から何まで疑って掛かることになりそう。
確かにそうですね。
ご親切にありがとうございます。
もう少しこちらでも悩んで見ます。

補足日時:2009/05/01 15:04
    • good
    • 0

これだけでは分かりませんが


http://bg.pi-ppi.com/page/n01/000143.html
あたりから、試して見て原因を切り分けしていってみてはどうですか。

この回答への補足

教えていただいたソースをcheck.phpとし、xamppの環境で実行するとDB内のデータが表示されるので、やはり何か環境設定の問題かと思われます。

個別インストール環境で実行すると以下のメッセージが表示されます。
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in E:\A-Vaio\Clients\0-htdocs\www\main\current\text\MySQL\check.php on line 22

13行目、if....が閉じた後に
else {
print "成功です<br>";
}
18行目を
mysql_select_db( $dbname, $res_dbcon ) or die("失敗です");
とすると
”成功です
失敗です”
と表示されることから、DBの選択が出来ていないように思われます。

php.ini辺りの設定でしょうか?
register_globals=On
にはなっているのですが、その他に必要な設定などあれば教えていただけないでしょうか?

補足日時:2009/04/28 16:41
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!