

MacOS 10.12.2でローカルサーバー（PHP7.0.14)でサーバを立ててPHPを勉強しています。

[code]

    <?php
    
    define('DB_DATABASE', 'test_db');    //データベース指定  
    define('DB_USERNAME', 'dbuser');     //データベースユーザ
    define('DB_PASSWORD', '********');   //データベースパスワード
    define('PDO_DSN', 'mysql:dbhost=localhost;dbname=' .DB_DATABASE);    
    //   データベースに接続するための文字列
    
    try {
        //connect
        $db = new PDO(PDO_DSN, DB_USERNAME, DB_PASSWORD);
        $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    
        //insert
        $db->exec("insert into users (name, score) values ('ryo', '55')");
        echo "user added!";
    
        //disconnect
        $db = null;
     }catch (PDOException $e){
        echo $e->getMessage();
        exit;
    }
    
[/code]

このindex.phpにアクセスすると、データベースに情報を追加するというシンプルなコードです  
ブラウザから接続すると、SQLSTATE[HY000] [2002] No such file or directoryとエラーが出ます。  
`sudo chmod 777 /usr/local/var/mysql/`  
を実行して、PHPもデータベースへのアクセス権を与えたのですがうまくできませんでした。

回答お願いします。


CC BY-SA 3.0
2016-12-26T18:18:08.273
31420
2022-04-12T17:01:35.140
2016-12-26T22:28:31.897
8000
20028
question
php mysql macos
SQLSTATE[HY000] [2002] No such file or directory


僕も同じエラーが発生しました。  
MySQLが起動していなかったことが原因でした。

[code]

    $ sudo mysql.server start
    
[/code]

でイケました。


CC BY-SA 3.0
2017-07-29T07:05:45.530
36764
2017-07-29T07:05:45.530
24638
31420
answer


> 注意: Unix のみ  
>  ホスト名を `"localhost"` にすると、サーバーへの接続はドメインソケットを使って行われます。  
>  libmysqlclient を使って PDO_MYSQL をコンパイルした場合は、ソケットファイルの場所は libmysqlclient
> のコンパイル時の場所になります。  
>  mysqlnd を使って PDO_MYSQL をコンパイルした場合は、デフォルトのソケットは `pdo_mysql.default_socket`
> の設定を使って作られます。  
>  \-- <http://php.net/manual/ja/ref.pdo-mysql.connection.php>

上記に引用した事象が発現しているとしたら `No such file or directory`
というのはソケットファイルが見つからないという意味ではないでしょうか。

`mysqld` の起動後、ソケットファイルのパスを特定し php.ini で指定するか、  
単に `PDO_DSN` に `unix_socket=...` とすることでソケット接続を指定できます。  
（`/usr/local/var/mysql` の様なので）仮に MySQL を Homebrew でインストールしたのであれば、ソケットファイルの場所は
`/tmp/mysql.sock` だったと思います。

あるいは `host=127.0.0.1` などすることで上記制限に引っかからなくなるかも知れません（未確認です）。

ご確認ください。

* * *

もう一点

> PDO_MYSQL データソース名（DSN）は以下の要素で構成されます。  
>  ...  
>  `host`  
>  データベースサーバーが存在するホスト名を指定します。  
>  \-- <http://php.net/manual/ja/ref.pdo-mysql.connection.php>

よって `dbhost=localhost` ではなく `host=localhost` が正しいと思います。  
（まあ、正しくした所でソケット接続になってしまうようですが。。。）


CC BY-SA 4.0
2018-06-08T08:54:34.610
44617
2018-06-08T08:54:34.610
28832
31420
answer