• 締切済み

mysql_fetch_array()関数でのエラー

現在、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では選択されている)のですが、何が問題なのでしょうか?

みんなの回答

  • nora1962
  • ベストアンサー率60% (431/717)
回答No.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さんも書かれていますが、コマンドラインツールで該当のデータベース に接続・選択が出来ますか?

bacchus047
質問者

補足

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

  • hrm_mmm
  • ベストアンサー率63% (292/459)
回答No.2

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

bacchus047
質問者

補足

まずバージョンですが、 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接続と、その該当データベースを開くことは出来ているのでしょうか? これも出来ています。 > 個別インストールでどういう手順を踏んだかは、こちらでは、知りようがないので、何から何まで疑って掛かることになりそう。 確かにそうですね。 ご親切にありがとうございます。 もう少しこちらでも悩んで見ます。

  • nora1962
  • ベストアンサー率60% (431/717)
回答No.1

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

bacchus047
質問者

補足

教えていただいたソースを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 にはなっているのですが、その他に必要な設定などあれば教えていただけないでしょうか?

関連するQ&A