오류에 연결할 때 MySQL 를 사용하여 PHP/PDO
문제
나의 코드 작업은 모든 잘 어제와 오늘 갑자기 그냥하고 싶지 않는 데이터베이스에 연결.가 변경된 설정이 없거나에 코드를 업데이트하지 않았습니다.모든 소프트웨어다.나이:
new PDO('mysql:host=localhost;port=3306;dbname=test', 'username', 'password');
나는 좋은 예외 메시지가 이것을 말하기:
Warning: PDO::__construct(): [2002] No such file or directory (trying to connect via unix:///tmp/mysql.sock) in ...
는 것입니다:난 명확하지 않을 사용하여 연결하려고 하는 유닉스 소켓만을 사용하여 TCP/IP.무엇이 잘못된 것입니까?뭔가가 나는 누락까요?
어떤 도움을 주셔서 감사합니다.
해결책
UNIX 소켓을 사용하고 있습니다. "LocalHost"를 읽을 때 MySQL 클라이언트 라이브러리는이를 TCP 호스트 "LocalHost"로 해석하지 않고 해당 이름을 해결하지만 기본 소켓 위치를 사용하십시오. 로컬 컴퓨터에서 TCP를 사용하려면 사용해야합니다. 127.0.0.1
호스트 이름으로.
과거 사용을 지정합니다 unix_socket
대신에 host
DSN에서. 사용 된 소켓의 위치 localhost
컴파일 시간 또는 일부 버전의 PHP에서 정의 할 수 있습니다. pdo_mysql.default_socket
에서 php.ini
.
다른 팁
에서 PHP 에 대한 문서 연결하여 MySQL 를 사용하여 PDO: PDO_MYSQL DNS
참고 맨 마지막에 말한다:
Unix:
할 때 호스트 이름을 설정하면"localhost",그 다음 연결을 서버를 통해 도메인 소켓에.는 경우 PDO_MYSQL 컴파일에 대하여 libmysql 다음의 위치 socket 파일에서 libmysql 의 에서 컴파일한 위치에 있습니다.는 경우 PDO_MYSQL 컴파일에 대한 mysqlnd a 기본 소켓을 설정할 수 있습을 통해 pdo_mysql.default_socket 설정입니다.
그래서 이 문제를 해결하기 위해 당신을 올바로 구성 in php.ini 의 위치 mysql.양말
을 찾아 mysql.양말 파일입니다.일반적인 위치:
- /tmp/mysql.양말
- /tmp/mysql/mysql.양말
- /var/mysql/mysql.양말
- 거나 사용하는 경우 MAMP 또는 램프를 찾 내부 tmp 폴더 mysql
편집 php.ini 파일을 적절히 설정 값에 대한 pdo_mysql.default_socket
다시 시작 당신의 아파치 서버의 픽업에서 변경 php.ini 파일
Ubuntu에서는 php.ini 에서이 설정을 사용할 수 있습니다.
pdo_mysql.default_socket=/var/run/mysqld/mysqld.sock
방금이 줄을 추가했습니다.
'unix_socket' => '/Applications/XAMPP/xamppfiles/var/mysql/mysql.sock',
그리고 모든 것이 잘되었습니다.
문서화 된 Drush의 문서에 대한 업데이트가 있습니다. 여기.