読者です 読者をやめる 読者になる 読者になる

HHeLiBeXの日記 正道編

日々の記憶の記録とメモ‥

MySQL接続設定 - PHP実行環境改変メモ(2)

PHP MySQL

引き続き、自宅のPCのPHP環境の改変。

ためしにMySQLに接続してみる

これまでと同様に、"php.ini"の次の行のコメントをはずす(963行目辺り)。

;extension=php_mysql.dll

あと、MySQLにアクセスするためのドライバ"libmysql.dll"が必要らしい。

これをロードさせるために、2つの方法が考えられる。

  • 環境変数PATHに指定されているディレクトリに"libmysql.dll"をコピーする。
  • "libmysql.dll"があるディレクトリを環境変数PATHに追加する。

前回、PostgreSQLに接続できるようにした際に、システム環境変数PATHに次のパスを追加している:

ので、今回はこれをそのまま活用することにする。
ここでひとつはまったこと。MySQL v5.1を使用しているのだが、ファイル名が"libmySQL.dll"となっていて、MinGW/MSYSでfindコマンドをたたいたときに見つけられなかったらしい。
ファイルをコピーしたら、Apache httpdを再起動する。
で、次のようなプログラムを作って実行してみる。

<pre><?php
    $mysql = mysql_connect(
        'localhost:3306',
        'root',
        'admin');
    mysql_select_db('test', $mysql);

    $res = mysql_query(
        "select column_name"
        . " from information_schema.columns"
        . " where table_schema = 'information_schema'"
        . "     and table_name = 'tables'"
        . " order by ordinal_position",
        $mysql);
    while (($row = mysql_fetch_assoc($res))) {
        print_r($row);
    }
    mysql_close($mysql);
?></pre>

PostgreSQLの場合と微妙にパラメータの順番とか提供されている関数セットが違ったりしていやだねぇ、というのは置いておくとして(謎)。
これを実行すると、次のようなエラーが表示された。

Warning:  mysql_connect() [function.mysql-connect]: [2002] 接続済みの呼び出し先が一定の時間を過ぎても正しく応答しなかったた (trying to connect via tcp://localhost:3306) in C:\path\to\php\samples\mysql.php on line 5

Warning:  mysql_connect() [function.mysql-connect]: 接続済みの呼び出し先が一定の時間を過ぎても正しく応答しなかったため、接続できませんでした。または接続済みのホストが応答しなかったため、確立された接続は失敗しました。
 in C:\path\to\php\samples\mysql.php on line 5

Fatal error:  Maximum execution time of 30 seconds exceeded in C:\path\to\php\samples\mysql.php on line 5

しばらく悩みながら、探してみたら、次のようなものを見つけた。

私の環境もWindows Vista。で、これによると、どうもhostsファイルに書いてあるIPv6ループバックアドレスlocalhostとのマッピングが書いてあるのが悪さをしているらしい。
ということで、「C:\Windows\System32\drivers\etc」にある"hosts"というファイルを管理者権限で開き、次の行をコメントアウト

::1             localhost

で、再度試してみると、今度はinformation_schema.tables表の列名が出力された。