Programing

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

lottogame 2020. 3. 29. 08:39
반응형

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


방금 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 설치와 관련이 있습니까?

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


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

pdo_mysql

PDO Driver for MySQL, client library version => 5.1.44

코드의 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

업데이트 : 최신 버전 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 줄 (내 경우에는 우분투 서버)을 표시하지 않으면 위의 줄을 실행하면됩니다.


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

sudo apt-get install php-mysql

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

sudo service apache2 restart

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

extension_dir = "c:\php5\ext"


나는 같은 문제가 있었다. 솔루션은 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
    

이것은 내 문제를 해결


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

sudo apt-get install php5-mysql

sudo apt-get install php-mysql 

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


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


이것을 php.ini에 추가 할 때 php_pdo.dll 참조가 db 드라이버 dll보다 먼저 있는지 확인하십시오. 다음과 같이 추가하십시오 :

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

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

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

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


나는 마지막 날에 왜 다음과 같은 오류가 발생했는지 알아 내려고 노력했습니다. 우분투 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 플러그인이 포함되어 있지 않은지 확인하십시오.


: \\ php.ini 파일의 Windows 8.1 / 10의 경우 "extension = pdo_mysql"줄의 주석을 해제해야합니다.


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

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

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


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


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

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


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


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

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

sudo apt-get install php5-mysqlnd

데비안 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/


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

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

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

php7.0-mysql-PHP 용 MySQL 모듈

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

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

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


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

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

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

$dbh = new PDO ("dblib ...

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

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

공지 :이 순서대로


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

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

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

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


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


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

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


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

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


phpinfo ()의 extension_dir에서 올바른 경로를 확인하십시오.


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 '{}' \;

$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

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


사용하려고 할 때도 같은 예외가있었습니다 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

참고 URL : https://stackoverflow.com/questions/2852748/pdoexception-could-not-find-driver

반응형