경고: PDO::__construct(): [2002] 해당 파일 또는 디렉토리가 없습니다(unix://tmp/mysql.sock을 통해 연결 시도 중).
어제는 코드가 정상적으로 작동했는데 오늘은 갑자기 데이터베이스에 연결하지 않으려고 합니다.나는 그것이나 코드에 대한 설정을 변경하지 않았고 소프트웨어도 업데이트하지 않았습니다.제가 하는 일은 이것뿐입니다.
new PDO('mysql:host=localhost;port=3306;dbname=test', 'username', 'password');
그리고 좋은 예외 메시지가 왔는데 이렇게 말합니다.
경고: PDO::__construct(): [2002] ...에 해당 파일이나 디렉토리(unix://tmp/mysql.sock을 통해 연결 시도 중)가 없습니다.
문제는 유닉스 소켓을 사용해서 연결하려는 것이 아니라 TCP/IP를 사용하는 것입니다.내가 뭘 잘못하고 있는 거지?제가 뭘 놓쳤나요?
도와주셔서 감사합니다.
유닉스 소켓을 사용하고 있습니다."localhost" MySQL 클라이언트 라이브러리를 읽을 때 TCP 호스트 "localhost"로 해석하지 않고 해당 이름을 확인하지만 기본 소켓 위치를 사용합니다.사용해야 하는 로컬 시스템에서 TCP를 사용하는 경우127.0.0.1
호스트 이름으로
과거 사용을 지정하는 방법unix_socket
대신에host
DSN에서.에 사용되는 소켓의 위치localhost
컴파일 타임이나 PHP의 일부 버전에서 정의할 수 있습니다.pdo_mysql.default_socket
에서php.ini
.
PDO: PDO_MYSQL DNS를 사용한 MySQL 연결에 대한 PHP 문서에서 볼 수 있습니다.
맨 끝의 메모에는 다음과 같이 적혀 있습니다.
유닉스 전용:
호스트 이름이 "localhost"(로컬호스트)로 설정되면 도메인 소켓을 통해 서버에 연결됩니다.PDO_MYSQL이 libmysql에 대해 컴파일된 경우 소켓 파일의 위치는 libmysql의 위치에서 컴파일됩니다.mysqlnd에 대해 PDO_MYSQL을 컴파일하면 pdo_mysql.default_socket 설정을 통해 기본 소켓을 설정할 수 있습니다.
따라서 이 문제를 해결하려면 php.ini에서 mysql.sock의 위치를 적절하게 구성해야 합니다.
mysql.sock 파일을 찾습니다.공통 위치:
- /tmp/mysql.
- /tmp/mysql/mysql.
- /var/mysql/mysql.
- 또는 MAMP 또는 LAMP를 사용하는 경우 mysql의 tmp 폴더 내부를 찾습니다.
php.ini 파일을 편집하고 pdo_mysql.default_socket 값을 적절하게 설정합니다.
Apache 서버를 재시작하여 php.ini 파일의 변경 사항을 선택합니다.
우분투에서는 php.ini에서 이 설정을 사용할 수 있습니다.
pdo_mysql.default_socket=/var/run/mysqld/mysqld.sock
드루쉬의 문서 업데이트가 여기에 기록되어 있습니다.
방금 이 대사를 추가했습니다.
'unix_socket' => '/Applications/XAMPP/xamppfiles/var/mysql/mysql.sock',
그리고 모든 것이 잘 되었습니다.
언급URL : https://stackoverflow.com/questions/1819592/warning-pdo-construct-2002-no-such-file-or-directory-trying-to-connect
'source' 카테고리의 다른 글
PL/SQL 트리거 내에서 Select 문을 사용하는 구문은 무엇입니까? (0) | 2023.10.06 |
---|---|
Jquery를 사용하여 CSS 속성이 변경된 경우 이벤트 탐지 (0) | 2023.10.06 |
메모리를 영점화하기 (0) | 2023.10.06 |
문자열이 NULL 또는 공백이 아닌지 확인합니다. (0) | 2023.10.06 |
malloc에서는 왜 brk를 사용합니까?왜 그냥 mmap을 사용하지 않습니까? (0) | 2023.10.06 |