PHPからMySQLへの接続方法について

OS X 10.6.4でPHPからMySQLを使いたいのですが設定方法が分かりません。

ご教授お願いできないでしょうか。


<行ったこと>


1)ユーザー名/サイト/にテスト用PHP、test.phpとdbtest.phpを設置

test.phpの内容は

<?php phpinfo(); ?>

dbtest.phpの内容は

<?php

$con=mysql_connect("localhost", "user_id", "password") or die("not conected");

print "U'er conected";

mysql_close($con);

?>


2)/private/etc/apache2/httpd.confの115行目

#LoadModule php5_module libexec/apache2/libphp5.so

の先頭の#を削除


3)システム環境設定の共有よりWeb共有on

http://localhost/~ユーザー名/test.phpで

PHPの情報が表示されるのを確認。


4)PHP情報に基づき

/private/etc/php.ini.default

の1063行目をpdo_mysql.default_socket=/tmp/mysql.sockに変更

1216行目と1275行目をmysql.default_socket = /tmp/mysql.sockに変更して

/private/etc/php.ini/を作成


5)mysql-5.1.52-osx10.6-x86_64.dmgより

mysql-5.1.52-osx10.6-x86_64.pkg

MySQLStartupItem.pkg

MySQL.prefPane

の3つをこの順でインストール


6)システム環境設定の共有よりWeb共有off/on

システム環境設定のMySQLよりMySQL ServerをStop/Start


7)http://localhost/~ユーザー名/dbtest.phpで

not connected表示される。


4)を32bitや10.5-86にしても同じ

iMac, Mac OS X (10.6.4)

投稿日 2010/11/05 04:07

返信
返信: 13

2010/11/07 02:24 -s への返信

MySQLだけでなく、DBは色々ややこしいですが基本は大体同じです。


まずは、キチンとMySQLがインストールされている事が重要なのですが、

5)mysql-5.1.52-osx10.6-x86_64.dmgより

mysql-5.1.52-osx10.6-x86_64.pkg

MySQLStartupItem.pkg

MySQL.prefPane

の3つをこの順でインストール

と、実施されているようでインストールされていると仮定して話を進めます。


次にやらなければならないことは、MySQLにデータベースを作成されているかどうかです。

たぶん、/usr/local/mysqlにインストールされてPathが通っているはずなので、


$ mysql5 -u root -p


で、mysqlに接続して


mysql> show databases;


としてDatabaseの一覧が出るようでしたらMySQLは使えている状態であると考えて問題無いと思います。

普通であれば、この状態であれば接続できるはずです。(MySQLが指定するソケットファイルのパスが正しければ)


しかし気になるのが、

dbtest.phpの内容は

<?php

$con=mysql_connect("localhost", "user_id", "password") or die("not conected");

print "U'er conected";

mysql_close($con);

?>


と、指定されているような"user_id"というユーザIDやそのパスワードである"password"が間違っていれば、当然"not conected"と表示されるはずです。

当たり前と言えば、当たり前ですが。(^^)

その辺も確認してみてください。

2010/11/07 03:06 Hiroki への返信

Hirokiさん、ありがとうございます。

確かに一番理解できていないところをご指摘されています。

まず、


$ /usr/local/mysql/bin/mysqladmin -u root password 'password'

でパスワードを設定し

$ /usr/local/mysql/bin/mysql -u root -p

Enter password:

でMySQLに入りました。

Welcome to the MySQL monitor. Commands end with ; or ¥g.

Your MySQL connection id is 4

Server version: 5.1.52 MySQL Community Server (GPL)


Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved.

This software comes with ABSOLUTELY NO WARRANTY. This is free software,

and you are welcome to modify and redistribute it under the GPL v2 license


Type 'help;' or '¥h' for help. Type '¥c' to clear the current input statement.


その後、


mysql> GRANT ALL PRIVILEGES ON testdb.* TO admin@localhost IDENTIFIED BY 'password';

でデータベース領域を作成し、




mysql> show databases;

+--------------------+

| Database |

+--------------------+

| information_schema |

| mysql |

| testdb |

+--------------------+

3 rows in set (0.01 sec)

で確認できています。


テスト用PHPの2行目は実際には

$con=mysql_connect("localhost", "admin", "password") or die("not conected");

です。

以上の操作でmysql> GRANT ALL PRIVILEGES ON testdb.* TO admin@localhost IDENTIFIED BY 'password';

のところは意味の理解が出来ていません。作ったtestdbがどこに出来ているかも理解していません。

UNIXコマンドならびにSQLの設定に関するコマンドに対する理解が貧しいのですがよろしくお願いします。

2010/11/07 18:06 -s への返信

では、早速。。。

mysql> show databases;

+--------------------+

| Database |

+--------------------+

| information_schema |

| mysql |

| testdb |

+--------------------+

3 rows in set (0.01 sec)

で確認できています。

なので、ちゃんとデータベース"testdb"は出来ているようですね。


そうすると、やはりデータベースを扱うユーザがちゃんと設定されていないようです。

以上の操作でmysql> GRANT ALL PRIVILEGES ON testdb.* TO admin@localhost IDENTIFIED BY 'password';

のところは意味の理解が出来ていません。作ったtestdbがどこに出来ているかも理解していません。

これは、"testdb"というデータベースに対して、localhost(このマシン)のadmin(パスワードはpassword)さんがアクセすることを許す。ということです。(多少乱暴ですが)

これをやっても、アクセスできないと言うことは、ユーザが作成されていないことが考えられます。

ユーザが作成されているかを確認するために、


$ mysql -u admin -p


もちろんパスワードがpasswordですかね。これでログインできればOKです。

ちなみに、ログイン出来なければ、


$ mysql -u root -p

mysql> grant select,insert,delete,update,create,drop,file,alter,index on *.* to admin identified by 'password';

mysql> flush privileges;

mysql> exit


として、ユーザを作成してみてください。adminという名前なので結構な操作を許していますが。。。(^_^)


もし、これもちゃんと問題解決しないようでしたら、socketファイルが一番の原因かな。。。

2010/11/08 00:06 Hiroki への返信

はにさんへの返信(MobileMe)でも書いたのですが、

$ /usr/local/mysql/bin/mysql -u admin -p

Enter password:

Welcome to the MySQL monitor. Commands end with ; or ¥g.

Your MySQL connection id is 1

Server version: 5.1.52 MySQL Community Server (GPL)


Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved.

This software comes with ABSOLUTELY NO WARRANTY. This is free software,

and you are welcome to modify and redistribute it under the GPL v2 license


Type 'help;' or '¥h' for help. Type '¥c' to clear the current input statement.


mysql>

となるので、ユーザーは出来ていると思います。

ただ、懸念はコマンドをfull pathで記述しないと、

$ mysql -u admin -p

-bash: mysql: command not found

となります。pathの問題でなければsocketファイル(=/private/tmp/mysql.sock ?)

の不具合の可能性が大と言うことですね。

何か光が見えてきたようで感謝いたします。あと少しよろしくお願いします。

2010/11/08 00:36 -s への返信

まず、

ただ、懸念はコマンドをfull pathで記述しないと、

$ mysql -u admin -p

-bash: mysql: command not found

となります。

pathの問題はbashがmysqlというコマンド自体を探せないだけですので、そこまで気にすることはないです。


では本題、


/private/tmp に mysql.sock というファイルはありますか?


でも、これがないとmysqlコマンドですら接続できないはずなので、きっとあるのでしょう。(^_^)

もしここにsocketファイルが無いとすると、これがビンゴです。(^^;

きっと、他のどこかのディレクトリにあるということです。


このsocketファイルの場所はmy.confに記載されています。

#もしかすると、/var/mysql/mysql.sock とか、/var/run/mysql/mysql.sock とか、/usr/local/var/の下とか。。。


ソケットファイルの居場所を探したら、php.iniの所定の場所に正しいsocketファイルの場所を指定してあげてください。

それで、動くようになるはずです。(もしかしたら、apacheを再起動した方が確実です)


これでも解決しない場合は、PHPのモジュールが妖しくなってきます。。。

2010/11/08 04:29 -s への返信

Hirokiさん、(残念ながら)/private/tmp/mysql.sockは存在します。

と、言うことはmysql.sockかPHPモジュールが壊れていると可能性もありますね。

Snow Leopard の再インストですか...?

慌てずに。(^_^) せっかくのトラブルです。これを克服すると、MacOSXやUNIXの仕組みがわかるきっかけになったりしますので楽しんで行きましょう!


今度は、PHPの設定がMySQLが用意しているものをちゃんと使っているかのチェックをします。


$ php -i | grep mysql.default_socket


これで、表示されるsocketファイルが、/provate/tmp/mysql.sock となっているか見てください。

ちなみに、php -i でphpの様々な設定一覧が表示されます。(先のtest.phpと同じです)

そのあとのgrep mysql.default_socket はphp -i で表示されたものから"mysql.default_socket"が含まれる行だけを表示しています。

もし、違っているようでしたら、/etc/php.ini ファイルの中に


[MySQL]


という行を探してください。そのちょっと下の方に


mysql.default_socket =


で始まる行があるか、もしかすると


;mysql.default_socket = /var/mysql/mysql.sock


のように " ; " でコメントアウトされているかもしれません。

この場合は、" ; "を削除してソケットファイルを指定します。

mysql.default_socket = /provate/tmp/mysql.sock

となるかと思います。


次に、PHPにMySQLにアクセスするためのモジュールがちゃんと入っているかの確認です。


$ php -m | grep mysql


としてみてください。

mysql

mysqli

mysqlnd

pdo_mysql

な、感じで表示されればOKでしょう。


頑張ってみてください。

2010/11/08 13:05 Hiroki への返信

Hirokiさん、詳細な指示をしていただいてありがとうございます。


まず、php -i | grep mysql.default_socketですが、

$ php -i | grep mysql.default_socket

PHP Warning: Unknown: It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected 'Asia/Tokyo' for 'JST/9.0/no DST' instead in Unknown on line 0

mysql.default_socket => /tmp/mysql.sock => /tmp/mysql.sock

pdo_mysql.default_socket => /tmp/mysql.sock => /tmp/mysql.sock

となり、タイムゾーンのセットを要求されますが、ソケットは/tmp/mysql.sockで/privateディレクトリーは指定されていません。


/tmp/mysql.sockが出てくるphp.iniの3行を/private/tem/mysql.sockに変更しましたが、PHPからMySQLへの接続はできません。

;によるコメントアウトも確認しましたが、コメントにはなっていません。


つぎに、$ php -m | grep mysqlですが、

$ php -m |grep mysql

mysql

mysqli

mysqlnd

pdo_mysql

なので、SQLのモジュールはOKと言うことみたいですね。


引続き、ご指導をお願いします。

2010/11/09 05:46 -s への返信

なんか、根本が違っているような。。。(^_^)


<?php

$con = mysql_connect('localhost', 'admin', 'password');

if (!$con) {

die('接続できませんでした: ' . mysql_error());

}

echo '接続に成功しました';

mysql_close($con);

?>


という、内容のtest.phpファイルを作って、これにアクセスしてもらえませんか?

なんか、見落としているような気がします。

2010/11/09 16:45 -s への返信

解決できて良かったです。(^_^)


DBはどこに出来ているかですが。。。

マニュアルを読むと書いてありますが。。。


-sさんの環境を全く知らないの当たっているかわかりませんが、たぶん、、、


/usr/local/var

の下あたりに、ログファイとDBデータがあるはずです。


/var

の下あたりも妖しいですが、探してみてください。

このスレッドはシステム、またはAppleコミュニティチームによってロックされました。 問題解決の参考になる情報であれば、どの投稿にでも投票いただけます。またコミュニティで他の回答を検索することもできます。

PHPからMySQLへの接続方法について

Apple サポートコミュニティへようこそ
Apple ユーザ同士でお使いの製品について助け合うフォーラムです。Apple Account を使ってご参加ください。