日本PHPユーザ会 掲示板

日本PHPユーザ会運営の掲示板です。※ただいまテスト運用中です。

日本PHPユーザ会 掲示板 » PHP事はじめ » php+MySQLの連携ができません

php+MySQLの連携ができません

ページ: 1

投稿者 投稿
会員
登録者: 3 2008
返信数: 11
前にSendmailでお世話になったhonyoです。
その節はありがとうございました。
その後やはり接続はできないのですが、localhostで練習して少し解ってきたら
レンタルサーバー等を検討しみるつもりです。

今回は、php+MySQLの連携でつまりました。
詰まっている内容は、
【1】phpからMySQLが接続できない
【2】phpMyAdmin:2.11.7がログインできない
です。

現在の環境は下記になります。
OS:Windows XP
PHP:5.2.5
Apache:2.0.63 (Win32)
MySQL:5.0
phpMyAdmin:2.11.7

MySQLのモニター(黒いコマンドプロンプト画面)からはMySQLにアクセスできます。
rootで入門書サンプルのデータベースを作成しました。
root以外の権限をGRANT~の構文で新規ユーザーを追加し、OKと表示されたので、一度終了。
MySQLモニター(コマンド)からは、
mysql -u 新ユーザ名 -p
password:新パスワード
からログインでき、データベースも参照できる状態です。

2.11.7は最新版なので、WEBで検索してconfig.inc.phpの設定方法をその通りにやってみました。phpMyAdminの画面で「新ユーザ名」「新パスワード」でアクセスしましたが、「#2003 - サーバが応答しません」と表示されてしまいます。
また、rootでやっても同じです。

<?
$my_con = mysql_connect("localhost","新ユーザ名","新パスワード");
if ($my_con == false){
die("MySQLの接続に失敗しました");
}else{
echo "接続成功!";
}
?>

上記サンプルを実行すると、下記メッセージが表示されます。

Warning: mysql_connect() [function.mysql-connect]: Can't connect to MySQL server on 'localhost' (10061) in C:\Program Files\Apache Group\Apache2\htdocs\7-1-1.php on line 2
MySQLの接続に失敗しました

phpinfo.phpではmysqlの項目が下記のようになっているので、それも原因かと思われますが、
phpiniで手動でlocalhost、root で設定したところで、同じです。
mysql.default_host no value no value
mysql.default_password no value no value
mysql.default_port no value no value
mysql.default_socket no value no value
mysql.default_user no value no value

どこの設定を変更すれば、よいのかわかりません。 :|
申し訳ございませんが、教えてください。
よろしくお願いします。
会員
登録者: 10 2007
返信数: 71
MySQLで「新ユーザ名」さんをGRANT~の構文で新規ユーザーを追加する時、
 GRANT ...中略...  TO 新ユーザ名@localhost  ...略...
という指定でしたら、試しに
 GRANT ...中略...  TO 新ユーザ名@'%'  ...略...
で置き換えて、ユーザ追加をやり直してみて下さい。
会員
登録者: 3 2008
返信数: 11
kona@mさん
前回も丁寧に教えていただき、ありがとうございます。

今回、いただいたアドバイスでやってみましたが、MySQLのモニターでは
「Query OK, 0 rows affected (0.02 sec)」とでまして、アクセスもできます。
ですが、結果は同じで
【1】phpからMySQLが接続できない
【2】phpMyAdmin:2.11.7がログインできない
のままです。。。 :'(
会員
登録者: 10 2007
返信数: 71
ごめんなさい、エラーメッセージをチェックしてみたところ、私が状況を勘違いしていたようです。ユーザ指定で違った場合は「Access denied」とかいうエラーメッセージになってくるようで、このエラーメッセージだと「MySQLサーバに接続できなかった」ということです。
MySQLのマニュアルに書かれているのですが英語です・・・。なんとなく眺めてみると、
引用
ネットワーク的に接続できていません。MySQLが動いていること、MySQLがネットワーク接続できること、MySQLが使用するポートがファイアウォールでブロックされていないことを確認して下さい。
localhostの代わりに127.0.0.1を指定してみて下さい。
MySQLが使用するポートが間違っていないか確認して下さい。mysqlクライアントで「show variables like 'port';」を実行すると使用されるポートが表示されます。
DOSプロンプトで「telnet <MySQLサーバアドレス> <MySQLのポート>」(例:telnet 127.0.0.1 3306)を実行してみて下さい。成功すれば「ホストとの接続が切断されました」と出ます。失敗ならば「ホストへ接続できませんでした」と出ます。
・・・のようなことが書かれているような気がします。一部アレンジしてあります。

今回の件とは関係ないと思いますが、PHP5.2.4~5.2.5の時に付属していたlibmysql.dllが相性が悪いらしく、PHP5.2.1に付属していたlibmysql.dllに差し替えてやるとうまくいった、という話もありました。
会員
登録者: 3 2008
返信数: 11
こんにちは。kona@mさん、ありがとうございます。

DOSプロンプトで「telnet <MySQLサーバアドレス> <MySQLのポート>」(例:telnet 127.0.0.1 3306)を実行
telnet 127.0.0.1 3306
→こちらを実行すると、「接続できませんでした」となります。
またtelnetで、open localhostとした場合、
「localhost...ホストへ接続できませんでした。ポート番号 23:接続に失敗しました」
となってしまいます。

telnetを終了し、コマンドプロンプトから、
ping localhost
を実行すると、4回エコーが返ってくるので、接続自身はできるのだと思います。
しかし、
netstat -n
を実行すると、localhost:3306の表示がありません。。。
別のポートを使用している、ということなのでしょうか?
会員
登録者: 3 2008
返信数: 11
すみません。お騒がせしましたーー。
接続できました :P

な、なんとmy.iniの設定で「port=3306」になっていない箇所がありました!
(文字コードしか触っていないはずなのになぁ~)

上記のサンプルスクリプトも「接続成功」しました。
phpMyAdmin 2.11.7も接続できます。

が、しかし、新たな問題が。。。
phpMyAdmin 2.11.7の画面が文字化けします。
デフォルトで「Unicode [UTF-8] 」になっています。
入門書では「EUC-JP」に統一しているので、それにならっています。
php.iniの設定かとも思いますが、文字コードは「EUC-JP」にしています。
他にどこか設定はありますでしょうか。

度々、すみません。
よろしくお願いいたします。m(_ _)m
会員
登録者: 10 2007
返信数: 71
とりあえず、MySQLの接続が出来てよかったですね。

で、phpMyAdminのほうですが・・・。昔、少しだけ触ってみただけですぐ使わなくなってしまったので、残念ながら私はあまりわかりません。
画面全体が文字化けするのでしょうか。それともデータベースの結果が文字化けするのでしょうか。たしかphpのマルチバイト設定のあたりで私も文字化けしたような記憶があります。apacheをお使いのようですから、.htaccessにマルチバイト関連の設定をいろいろ記述してphpMyAdminのディレクトリに置いてみるというのはどうでしょうか?

.htaccessの例:
php_value mbstring.internal_encoding UTF-8
php_value mbstring.http_output EUC-JP
会員
登録者: 3 2008
返信数: 11
こんにちは。
他に入門書には、my.iniの[mysqld]に「character-set-client-handshake」を記述することでサーバー側とクライアント側と文字の継承をする、、、みたいな内容でしたが、だめでした。

kona@mの教えていただいた方法のように下記「.htaccess」を記述し、phpMyAdminのディレクトリに置いてみましたが、だめでした。
php_value mbstring.internal_encoding "EUC-JP"
php_value mbstring.http_output "EUC-JP"
php_value mbstring.script_encoding "EUC-JP"
php_value mbstring.http_input "EUC-JP"

で、ぐぐって見たところ、というページでphpMyAdmin/libraries/database_interface.lib.phpを書き換えるという方法が載っていたので試してみたところ、文字化けが直りました。以下内容です。
----------------------------------------------------------------------------
function PMA_DBI_postConnect($link, $is_controluser = false)
:
/*
if (PMA_MYSQL_INT_VERSION >= 40100) {
:
} else {
require_once('./libraries/charset_conversion.lib.php');
}
*/
require_once('./libraries/charset_conversion.lib.php');
}

MySQL 4.1 の if 文をごっそりコメントアウトして、./libraries/charset_conversion.lib.php を強制的に読み込ませるようにする。
----------------------------------------------------------------------------
これで、すっかり文字化けが直りました。 :P

ちなみに上記の方法を紹介しているサイトでは、もうひとつ、続編として「.htaccess」での設定についても載っていましたが、こちらはダメ(上記で試しているので...)でした。

ページ: 1

日本PHPユーザ会 掲示板 » PHP事はじめ » php+MySQLの連携ができません

日本PHPユーザ会 掲示板 は UseBB 1 フォーラムソフトウェア を使用しています