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.5
에 CentOS
내가 설치하여이 고정 php55-mysqlnd
패키지를.
sudo yum -y install php55w-mysqlnd # For Webtatic
sudo yum -y install php55u-mysqlnd # For Remi
설치에 도움이 필요하면 시스템에 PHP가 설치되는 방식에 따라 주석을 작성하십시오. 사용 가능한 저장소는 webtatic
및 remi
입니다.
나는 마지막 날에 왜 다음과 같은 오류가 발생했는지 알아 내려고 노력했습니다. 우분투 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
대신 매우 권장 합니다 .mysql
mysql
우분투 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
'Programing' 카테고리의 다른 글
문자열을 연결하는 가장 효율적인 방법은 무엇입니까? (0) | 2020.03.29 |
---|---|
javac가 "확인되지 않거나 안전하지 않은 작업 사용"경고를 발생시키는 원인 (0) | 2020.03.29 |
하나의 디렉토리에있는 모든 파일을 반복 (0) | 2020.03.29 |
HTML 텍스트 필드에서 맞춤법 검사 사용 안함 (0) | 2020.03.29 |
jQuery : text ()와 html ()의 차이점은 무엇입니까? (0) | 2020.03.29 |