PDOException“드라이버를 찾을 수 없습니다”


292

방금 Apache, MySQL 및 PHP와 함께 Debian Lenny를 설치했으며 PDOException을 받고 could not find driver있습니다.

이것은 특정 코드 줄입니다.

$dbh = new PDO('mysql:host=' . DB_HOST . ';dbname=' . DB_NAME, DB_USER, DB_PASS)

DB_HOST, DB_NAME, DB_USER, 그리고 DB_PASS내가 정의했다고 상수이다. 프로덕션 서버 및 이전 Ubuntu Server 설정에서 제대로 작동합니다.

PHP 설치와 관련이 있습니까?

인터넷을 검색해도 도움이되지는 않았지만 전문가 교환 및 예제 만 있으면되지만 해결책은 없습니다.


21
당신의 룩 php.ini' file and uncomment 확장 = php_pdo_mysql.dll . The path to your php.ini` 파일이 phpinfo를 보면 찾을 수있다 ().
styfle

3
참고로 향후 독자에게이 오류가 발생하고 GoDaddy가 호스트 인 경우 관리자 계정으로 로그인하십시오. 호스팅 세부 사항-> 프로그래밍 언어. PHP 버전을 최신 또는 5.4 이상으로 업그레이드하십시오
Joe

@Joe 업그레이드했지만 여전히 오류가 발생합니다 (GoDaddy)
Eugen

@styfle 1up, Linux 컴퓨터에서 설정 extension=msql.so하고 작동합니다!
AjayKumarBasuthkar

도커에서 PHP 7.1 이상을 사용 docker exec하는 경우 컨테이너에 들어가서 실행할 수 docker-php-ext-install pdo pdo_mysql있습니다.
cleybertandre

답변:


240

pdo_mysql이라는 모듈이 필요합니다. phpinfo ()에서 다음을 찾고,

pdo_mysql

PDO Driver for MySQL, client library version => 5.1.44

2
@ZZ 코더 phpinfo ()에는 없습니다. 내가 어떻게 설치할 수 있는지 아십니까 pdo_mysql?
Mike Moore

14
@letseatfood ... 어떻게 알았습니까? 나는 같은 문제가 있습니다!
Hristo

17
MySQL에 대한 PDO 지원 설치를위한 Ubuntu "php5-mysql"패키지를 추천 할 수 있습니다.
Tom Carver

3
Apache 또는 다른 웹 서버를 사용하는 사용자는 Apache를 다시 시작해야 변경 사항이 적용됩니다.sudo systemctl restart httpd.service
Mugoma J. Okomba

50
Ubuntu 16.04 및 PHP7의 경우sudo apt-get install php-mysql
Ivan Marjanovic

199

코드의 dsn은 mysql 드라이버와 연결을 시도하고 있음을 나타냅니다. 오류 메시지는이 드라이버를 사용할 수 없음을 나타냅니다.

서버에 mysql 확장이 설치되어 있는지 확인하십시오.

우분투 / 데비안에서는 다음을 사용하여 패키지를 확인하십시오.

dpkg --get-selections | grep php | grep mysql

php5-mysql 패키지가 없으면 설치하십시오.

우분투 / 데비안에서는 다음을 사용할 수 있습니다.

  • PHP5 : sudo apt-get install php5-mysql
  • PHP7 : sudo apt-get install php7.0-mysql

마지막으로, 작동하려면 웹 서버를 다시 시작해야합니다.

  • 아파치 : sudo /etc/init.d/apache2 restart
  • Nginx : sudo /etc/init.d/nginx restart

3
아아 아아아 아아아
KOGI

나는 같은 문제가 있었다, php5-fpm을 다시 시작하십시오!
Eko3alpha

내가 당신의 대답을 볼 때까지 거의 밤새도록이 문제를 해결하려고 노력했습니다. 모든 것을 올바르게했지만 아파치를 다시 시작하는 것을 잊었습니다.
Mugoma J. Okomba

php-mysql은 이미 최신 버전입니다 (1 : 7.1 + 49 + deb.sury.org ~ xenial + 4). nginx php fpm으로 우분투 16.04에서 sudo apt-get install php-mysql 명령을 실행하려고하면 php fpm을 다시 시작한 다음 nginx를 다시 시작하십시오.
Prashant Barve

현재는 php-mysql 및 php7.1-mysql로 ​​보입니다. 바라건대 이것이 앞으로 나아가는 패턴입니다.
John P

83

업데이트 : 최신 버전 php-sqlite3대신 패키지를 사용해야 합니다 php5-sqlite. 최신 우분투 버전을 사용하는 경우 이것을 사용하십시오.

sudo apt-get install sqlite php-sqlite3

질문에 대한 원래 답변은 다음과 같습니다.

sudo apt-get install sqlite php5-sqlite
sudo /etc/init.d/apache2 restart

phpinfo ()가 pdo_sqlite 줄 (내 경우에는 우분투 서버)을 표시하지 않으면 위의 줄을 실행하면됩니다.


57
OP가 MySQL을 사용할 때 sqlite에 대한 지침을 제공 한 이유는 무엇입니까?
앤드류 Ensley

7
당신이 사용하는 경우 앤드류 pdo_sqlite와 설치하지 않은 php5-sqlite당신은 단지를 얻을 수 PDOExceptionsqlite가 누락에 대한 어떤 정보와 설치하려고 php5-mysql두 번.
Aitch

2
php5-sqlite는 더 이상 사용되지 않으며 Ubuntu 16.04와 같이 더 이상 시스템에서 사용하지 못할 수 있습니다. 대신 php-sqlite3을 설치하십시오.
Matthias

2
@briankip 물론 SQLite에 연결하려고하는데 해당 드라이버가없는 경우입니다. 그러나 OP는 MySQL에 연결하려고합니다. sqlite를 설치하면 문제를 해결할 수 없습니다.
Andrew Ensley

2
@AndrewEnsley. 이 페이지의 제목은 모든 사람이 db 플랫폼에 관계없이 발생하는 오류입니다. 결과적으로 Google에 오류가있는 경우이 페이지의 Google 검색 순위가 가장 높습니다. 따라서 IMO, 다른 데이터베이스와 관련된이 질문에 대한 답변을 환영합니다. 그들이 OP에 대해 효과가 없다면, 그렇게하십시오 ... OP는 그 대답을 받아 들일 필요가 없습니다. 졸 타의 검색 순위로이 질문을 선물 한 제목의 오류 메시지를 조사하는 다른 사람들에게이 답변이 "유용하지 않다"는 것은 아닙니다. +1
elrobis

34

PHP 7.0이 설치된 최신 버전의 Ubuntu의 경우 php-mysql패키지를 얻을 수 있습니다 .

sudo apt-get install php-mysql

그런 다음 서버를 다시 시작하십시오.

sudo service apache2 restart

나는 nowdays 당신이 버전 sudo는 apt-get을 php7.2 - MySQL을 설치에 구체적으로 생각
스탠 소콜로프을

25

나는 같은 문제가 있었다. 솔루션은 OS에 따라 다릅니다. 내 경우에는 데비안이 있으므로 해결해야합니다.

  • 내 PHP 버전을 ( php5에서 php7로 ) 업데이트했습니다.
  • php-mysql 및 php7.0-mysql 설치

    apt-get install php-mysql
    apt-get install php7.0-mysql
  • php.ini/etc/php/7.0/apache2/php.ini에서 위치를 편집했습니다.

    uncomment the line : extension=php_pdo_mysql.dll
  • 그런 다음 아파치를 다시 시작하십시오.

    service apache2 restart

이것은 내 문제를 해결


여담이 매우 충분하지 않았고 완전히로 단계를 이동 작동 할 수 php7을 확인하기 전에 PHP5를 제거하지 않는 발견 누가 나 같은 사람들을 위해 같이 a2dismod php5, a2enmod php7.0그리고 service apache2 restart마지막으로 내가하고 실행 돌아왔다.
depwl9992

21

내 Windows 컴퓨터에서 php.ini의 확장 디렉토리에 대한 절대 경로를 제공해야했습니다.

extension_dir = "c:\php5\ext"


2
방금 이것이 사실임을 확인했습니다 (Win2008). 이상-다른 확장은 권장 확장만으로 작동 extension_dir = "ext"하지만이 확장은 작동 하지 않습니다.
scipilot

여기에서도 마찬가지입니다. 경로를 추가하고 작업을 시작했습니다. Windows10, php7.1
Chris Gibb

14

우분투에서는 그냥 실행하십시오.

sudo apt-get install php5-mysql

1
나는 Symfony2와 Ubuntu 뒤에있었습니다. Pdo_mysql을 찾을 수 없습니다 ([PDOException]에서 드라이버를 찾을 수 없음). 이것은 문제를 해결했다.
14:04에

2
나를 위해 나는 Postgresql이 없어서 결국 다음과 같이 끝났습니다.sudo apt-get install php5-pgsql
Kzqai

@Kzqai 2:30 지금 나는 당신이 내 문제를 해결, 내가 포스트 그레스 (> ლ)를 사용했다 MySQL을 사용 was't
Dheeraj

9
sudo apt-get install php-mysql 

우분투와 PHP 7에서 잘 작동했습니다.


php7을 사용하지 않고 php5.6을 사용하고 있지만 그것은 나를 위해 일했습니다. 그러나 7이 설치되어 있습니다. 나중에 5.6을 설치하고 php7을 제거하지 않고 php7로 전환했습니다
Mubashar Abbas

9

로 모듈을 사용할 수 있는지 확인하십시오 php -m | grep pdo_mysql.

그렇지 않은 경우 PHP 7.2의 경우을 사용하여 관련 패키지를 설치할 수 있습니다 sudo apt install php7.2-mysql.

다른 PHP 버전 및 패키지 관리자에서도 비슷한 명령을 사용하십시오.


6

이것을 php.ini에 추가 할 때 php_pdo.dll 참조가 db 드라이버 dll보다 먼저 있는지 확인하십시오. 그렇지 않으면이 오류 메시지도 발생합니다. 다음과 같이 추가하십시오 :

[PHP_PDO]
extension=php_pdo.dll
[PHP_PDO_MYSQL]
extension=php_pdo_mysql.dll

2
PHP v5.3부터이 php_pdo.dll모듈은 더 이상 필요하지 않습니다 (존재하지 않음). php.net/manual/en/pdo.installation.php 가 아마도이 질문에 대한 궁극적 인 답변 일 것입니다.
Martin Zeitler

5

MySQL과 드라이버가 올바르게 설치된 경우 php.ini를 확인 했습니까 (phpinfo ()로 올바른 위치를 확인하십시오)?


2
php.ini를 찾고 있는데 무엇을 찾아야합니까? 시작 부분[MySQL]
Mike Moore

4

의 경우 PHP 5.5CentOS내가 설치하여이 고정 php55-mysqlnd패키지를.

sudo yum -y install php55w-mysqlnd # For Webtatic
sudo yum -y install php55u-mysqlnd # For Remi

설치에 도움이 필요하면 시스템에 PHP가 설치되는 방식에 따라 주석을 작성하십시오. 사용 가능한 저장소는 webtaticremi입니다.



3

내 경우에는 내 DSN 문자열이 잘못되었습니다. 특히 mysql://. 'DSN 문자열이 드라이버 / 프로토콜을 지정하지 않았습니다'와 같은 다른 오류 메시지가 예상되었을 것입니다.

mysql://DSN 문자열의 시작 부분에 추가 하면 문제가 해결되었습니다.


3

나는 마지막 날에 왜 다음과 같은 오류가 발생했는지 알아 내려고 노력했습니다. 우분투 14.04를 실행 중입니다.

문제 :
PHP-CLI 버전이 php7.0을 실행하고 있지만 php_info () (웹 버전)가 PHP 5.5.9를 표시하고 있음을 알았습니다. php_info ()가 pdo가 활성화되었다고 말했지만 CLI (명령 줄)를 사용하여 pdo_mysql 명령을 인식하지 못했습니다. mysql은 내 이전 버전에서는 활성화되었지만 CLI 버전에서는 활성화되지 않은 것으로 나타났습니다. 내가 한 것은 php7.0 용 mysql을 설치하는 것이었고 작동 할 수있었습니다.

이것이 효과가 있습니다.

버전을 확인하려면

php -v

php7.0 용 mysql을 설치하려면

sudo apt-get install php7.0-mysql

1) CLI 버전이 웹 버전과 동일한 지 확인하십시오.
2) 버전 이 다르면 CLI 버전에 기본적으로 mysql 플러그인이 포함되어 있지 않은지 확인하십시오.


2

PHP 구성 파일의 extension_dir이 올바르게 설정되어 있는지 확인하십시오. 일부 확장 기능에 주석을 달거나 주석을 해제하고 phpinfo ()에 반영되는지 확인하십시오. 그렇지 않으면 PHP 구성 파일을로드 할 수 없습니다 (잘못된 위치) extension_dir이 주석 처리되거나 잘못된 위치로 설정됩니다.


2

문제는 누락 된 PHP to mysql 라이브러리입니다. CentOs에서는 # yum install php-mysql아파치를 실행 하고 다시 시작하여 문제 # /bin/systemctl restart httpd.service를 해결했습니다. 네이밍은 데비안 / 우분투 기반 배포판, php-> php5 및 httpd-> apache2와 약간 다릅니다.


2

별도의 php.ini로 테스트를 실행하는 동안 동일한 문제가 발생했습니다. 이 줄을 내 php.ini 파일에 추가해야했습니다.

[PHP]
extension = mysqlnd.so
extension = pdo.so
extension = pdo_mysql.so

공지 :이 순서대로


2

숫자 변환 및 비트 유형과 같은 많은 문제가 확장 프로그램의 문제를 평가하기 때문에 mysqllnd대신 매우 권장 합니다 .mysqlmysql

우분투 mysqllnd에서 다음 명령으로 설치하십시오 .

sudo apt-get install php5-mysqlnd

1

데비안 6에서이 문제를 해결했습니다. 일반적으로 방금 php5-common패키지를 설치했습니다 . 설치 후 웹 서버를 다시 시작해야합니다 (설치 한 서버에 따라 aache 또는 nginx). 그런 다음 lsof아파치 프로세스 ID ( lsof -p process_id)를 다음과 같이 수행합니다.

sudo lsof -p 1399   #replace 1399 by your apache process id
apache2 1399 root  mem    REG  254,2    80352 227236 /usr/lib/php5/20090626/xmlrpc.so
apache2 1399 root  mem    REG  254,2   166496 227235 /usr/lib/php5/20090626/suhosin.so
apache2 1399 root  mem    REG  254,2    31120 227233 /usr/lib/php5/20090626/pdo_mysql.so
apache2 1399 root  mem    REG  254,2   100776 227216 /usr/lib/php5/20090626/pdo.so
apache2 1399 root  mem    REG  254,2   135864 227232 /usr/lib/php5/20090626/mysqli.so

위에서 볼 수 있듯이, 모듈은 공통 라이브러리 경로에 의해 알려 지거나 안내되지 않는 파일 경로에 설치됩니다 : / usr/lib/php5/20090626/. 설치의 경우, pdo_mysql.so, pdo.so, mysqli.so의 경로 만 다를 수 있습니다. 따라서 Drupal 또는 다른 PHP 엔진이 라이브러리를 찾지 못하고 오류를 표시하는 이유는 다음과 같습니다.PDOException: could not find driver

이 같은 이상한 경로에 설치되어있는 이유를 난 그냥 내가 아래에 모든 파일을 상징적를 작성하여 문제를 해결 데비안 6에서 라이브러리 패키지 설치 스크립트에 불과 버그 나를 위해, 모르는 /usr/lib/php5/20090626//usr/lib/php5/이 명령 :

ln -s /usr/lib/php5/20090626/* /usr/lib/php5/


php-mysql은 이미 최신 버전입니다 (1 : 7.1 + 49 + deb.sury.org ~ xenial + 4).
Prashant Barve

1
$DB_TYPE = 'mysql'; //Type of database<br>
$DB_HOST = 'localhost'; //Host name<br>
$DB_USER = 'root'; //Host Username<br>
$DB_PASS = ''; //Host Password<br>
$DB_NAME = 'database_name'; //Database name<br><br>

$dbh = new PDO("$DB_TYPE:host=$DB_HOST; dbname=$DB_NAME;", $DB_USER, $DB_PASS); // PDO Connection

이것은 나를 위해 일했습니다.


1
드라이버없이이 사용자는 여전히 동일한 예외를
받습니다.

1

php7 패키지를 설치하기 위해 php5 패키지 (모든 드라이버도 포함)를 제거한 후에도 같은 문제에 직면했습니다. 실제로 mysql 모듈없이 php7 패키지를 설치했습니다.

터미널에 입력하여 문제를 해결했습니다.

1) $ apt-cache search php7은 내가 찾은 모듈을 통해 모든 모듈을 나열합니다.

php7.0-mysql-PHP 용 MySQL 모듈

2) $ sudo apt-get 설치 PHP7.0-mysql

그게 다야. 그것은 내 리눅스 시스템에서 나를 위해 일했습니다.

(적절한 PHP 버전을 사용하면 PHP5가 될 수 있음)


1

일부 사람들은 시작하기 위해 인터넷에서 예제 코드를 복사 / 붙여 넣기로 확인해야합니다. 여기에 MySQL을 입력했는지 확인하십시오.

... $dbh = new PDO ("mysql: ...  

일부 예에서 이것은 보여줍니다

$dbh = new PDO ("dblib ...

1

제 경우에는 php-cli와 함께 PDO를 사용하고 있었고 정상적으로 작동했습니다.

아파치에서 연결하려고 할 때만, 나는 "실종 된 드라이버"문제를 겪었습니다.

간단하게 apt-get install php-mysql해결했습니다. (우분투 16.04 / PHP7. 크레딧은 선택된 답변과 Ivan의 의견으로 이동)

그것이 도움이되기를 바랍니다.


1

Symfony2 / 3를 사용하고 왜이 오류가 발생하는지 궁금한 사용자에게 적합합니다. "mapping_types"를 사용하는 경우이 오류가 발생할 수 있습니다. 그 이유는 "mapping_types"가 잘못된 레벨에 있기 때문입니다. 예를 들면 :

doctrine:
  dbal:
    mapping_types:
        set: string

이 "mapping_types"는이 레벨에 있어야합니다.

doctrine:
dbal:
    #To counter the error caused by 'mapping_types'
    connections:
        default:
            server_version: %database_server_version%
            mapping_types:
                set: string

이게 도움이 되길 바란다

나는 여기에서 해결책을 찾았다 : https://github.com/doctrine/DoctrineBundle/issues/327


1

어디를 가든 경로가 절대 경로 extension_dir로 바뀌어야한다는 것을 읽었습니다 ext. 그것은 나를 위해 일했다. 그러나 동료 PC의 서버를 만들려고 할 때 가치를ext 절대 경로를 두는 대신 두어야했습니다.

절대 경로를 입력했지만 확장명을 찾을 수없는 경우 절대 경로와로 모두 시도해보십시오 ext.


1

PHP의 잘못된 설치가 호출되었습니다

같은 문제가 발생했습니다. 그리고 이것이 나와 비슷한 문제가있는 사람에게 도움이되기를 바랍니다.

대본

OS = Windows 10  
Platform = XAMPP  
PHP Version = 7 (Multiple Version seem to have been installed in the PC)  

폴더에 phpinfo.php파일을 만들고 파일 위치를 찾기 위해를 public실행했습니다 .phpinfo()php.ini

PHP.ini 위치 = c:\xampp\php\php.ini

문제는
호출 c:\xampp\htdocs> php -v반환 PHP 7.2.3하지만 phpinfo.php보였다 PHP 7.2.2.


전화 대신 솔루션

php artisan migrate:install   

이 오류가 발생했습니다.

c:\xampp\php\php artisan migrate:install

그리고 효과가있었습니다.



1
PHP Fatal error:  Uncaught PDOException: could not find driver

나는 "apt install php-mysql php7toInfinity로 고생하고 sqlite-what-ever 's를 잊지 마십시오"로 돌아가서 기본으로 돌아가서 웹 사이트에서 파일 권한을 재설정 할 때 까지이 오류 메시지를 제거 할 수 없었습니다. 문제의.

이 3 개의 명령은 웹 사이트에서 파일 및 폴더 권한을 재설정하고 다시 작동하게합니다.

cd /var/www/web-site-name.com/web/

# find (sub) directories and change permissions
find . -type d -exec chmod 755 {} \;

# find files and change permissions
find . -type f -exec chmod 664 '{}' \;

0

사용하려고 할 때도 같은 예외가있었습니다 pdo_sqlite. 문제는 자동으로 생성 20-pdo_sqlite.ini되고 20-sqlite3.ini심볼릭 링크가/etc/php5/mods-enabled )가 손상되었다는 것입니다.

깨진 심볼릭 링크를 제거하고 다음을 사용하여 수동으로 추가하십시오.

  • sudo ln -s /etc/php5/mods-avaliable/pdo_sqlite.ini /etc/php5/mods-enabled/20-pdo_sqlite.ini
  • sudo ln -s /etc/php5/mods-avaliable/sqlite3.ini /etc/php5/mods-enabled/20-sqlite3.ini

문제를 해결했습니다.

참고 : 이전 PHP 버전에서는 구성을 찾지 않았으므로 작동하지 않습니다. /etc/php5/mods-enabled

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.