PDOException “sürücü bulunamadı”


292

Debian Lenny'yi Apache, MySQL ve PHP ile yeni kurdum ve bir PDOException alıyorum could not find driver.

Bu, atıfta bulunduğu özel kod satırıdır:

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

DB_HOST, DB_NAME, DB_USERVe DB_PASSben tanımlanmış olması sabitlerdir. Üretim sunucusunda (ve önceki Ubuntu Sunucusu kurulumumda) iyi çalışıyor.

Bu PHP kurulumumla ilgili bir şey mi?

İnternette arama yapmak yardımcı olmadı, elde ettiğim tek şey uzman değişimi ve örnekler, ancak çözüm yok.


21
Sizin de bak php.ini' file and uncomment uzantısı = php_pdo_mysql.dll . The path to your php.ini` dosyası, phpinfo bakarak bulunabilir ().
Ocak'ta styfle

3
Gelecekteki okuyuculara FYI, bu hatayı alırsanız ve GoDaddy sunucunuzsa, yönetici hesabınıza giriş yapın. Hosting Detayları-> Programlama Dilleri. PHP sürümünüzü en son veya en az 5.4 sürümüne yükseltin
Joe

@Joe yükseltme yaptım ama hala bir hata alıyorum (GoDaddy)
Eugen Sunic

@styfle 1up, Bir Linux makinesinde hazırladım extension=msql.sove işe yarıyor!
AjayKumarBasuthkar

Kime endişe duyabilir: docker üzerinde php 7.1+ kullanıyorsanız docker exec, konteyner içine girip çalıştırabilirsiniz docker-php-ext-install pdo pdo_mysql.
cleybertandre

Yanıtlar:


240

Pdo_mysql adlı bir modülünüz olması gerekir. Phpinfo () içinde aşağıdakileri arıyorsunuz,

pdo_mysql

PDO Driver for MySQL, client library version => 5.1.44

2
@ZZ Coder Bu phpinfo () içinde mevcut değildir. Nasıl kurabileceğimi biliyor musun pdo_mysql?
Mike Moore

14
@letseatfood ... Bunu nasıl anladın? Bendede aynı sorun var!
Hristo

17
MySQL için PDO desteği kurmak için Ubuntu "php5-mysql" paketini önerebilirim
Tom Carver

3
Apache veya başka bir web sunucusu kullananlar için değişikliklerin yürürlüğe girmesi için Apache'nin yeniden başlatılması gerektiğini unutmayın:sudo systemctl restart httpd.service
Mugoma J. Okomba

50
Ubuntu 16.04 ve PHP7 kullanımı içinsudo apt-get install php-mysql
Ivan Marjanovic

199

Kodunuzdaki dsn, mysql sürücüsü ile bağlanmaya çalıştığınızı gösterir. Hata iletiniz, bu sürücünün kullanılamadığını gösterir.

Sunucunuzda mysql uzantısının yüklü olduğundan emin olun.

Ubuntu / Debian'da paketi kontrol etmek için:

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

Eğer sahip değilseniz php5-mysql paketini kurun.

Ubuntu / Debian'da şunları kullanabilirsiniz:

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

Son olarak, çalışmasını sağlamak için web sunucunuzu yeniden başlatmanız gerekir:

  • Apache: sudo /etc/init.d/apache2 restart
  • nginx: sudo /etc/init.d/nginx restart

3
ahh ... yeniden başlatma beni bitiren şey!
KOGI

Aynı sorunu yaşadım, php5-fpm'yi yeniden başlattığınızdan emin olun!
Eko3alpha

Cevabınızı görene kadar bunu neredeyse bütün gece geçirmeye çalıştım. Her şeyi doğru yapmıştı ama apache'yi yeniden başlatmayı unuttum.
Mugoma J. Okomba

php-mysql zaten en yeni sürümdür (1: 7.1 + 49 + deb.sury.org ~ xenial + 4). Komut sudo apt-get install php-mysql ubuntu 16.04 içinde nginx php fpm ile çalıştırmayı denediğimde php fpm'yi yeniden başlatıp nginx'i yeniden başlatın.
Prashant Barve

Şu anda php-mysql ve php7.1-mysql gibi görünüyor. Umarım bu ilerleyen kalıptır.
John P

83

Güncelleme : daha yeni sürümler php-sqlite3yerine paket kullanmalıdır php5-sqlite. Bu nedenle, yeni bir ubuntu sürümü kullanıyorsanız bunu kullanın:

sudo apt-get install sqlite php-sqlite3

Soruya orijinal cevap burada:

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

Eğer phpinfo () pdo_sqlite satırını (benim durumumda, Ubuntu Sunucumda) göstermiyorsa, sadece yukarıdaki satırları çalıştırmanız gerekir ve sonra gitmek için iyi olacaksınız.


57
OP MySQL kullanırken neden sqlite için talimat verdiniz?
Andrew Ensley

7
Eğer kullanırsanız @ Andrew pdo_sqliteve yüklemek vermedi php5-sqliteYalnızca olsun PDOExceptionsqlite eksik hakkında hiçbir bilgi ile ve yüklemeye çalışırken php5-mysqliki defa.
Aitch

2
Php5-sqlite artık kullanılmıyor ve artık sisteminizde mevcut olmayabilir, yani Ubuntu 16.04. Bunun yerine php-sqlite3'ü yükleyin.
Matthias

2
@briankip Tabii ki, SQLite'a bağlanmaya çalışıyorsanız ve bu sürücü eksikse. Ancak OP MySQL'e bağlanmaya çalışıyor. Sqlite kurmak onun sorununu çözerdi / çözemezdi.
Andrew Ensley

2
@AndrewEnsley. Bu sayfanın başlığı herkesin db platformundan bağımsız olarak aldığı hatadır. Sonuç olarak, yalnızca hatayı google'da yaparsanız, bu sayfa en yüksek google arama sırasına sahiptir. Bu nedenle, IMO, bu soruya diğer veritabanlarıyla ilgili her türlü yanıtı memnuniyetle karşılamalıdır. Eğer OP için çalışmazlarsa, öyle olsun ... OP bu cevapları kabul etmek zorunda değil. Bu, bu cevabın Zoltar'ın arama sıralamasında bu soruyu hediye eden başlıktaki hata mesajını araştıran diğerlerine "yararlı" olmadığı anlamına gelmez. +1
elrobis

34

PHP 7.0 içeren Ubuntu'nun yeni sürümleri için php-mysqlpaketi alabilirsiniz :

sudo apt-get install php-mysql

Ardından sunucunuzu yeniden başlatın:

sudo service apache2 restart

Ben bugünlerde sürüm sudo apt-get install php7.2-mysql ile özel olması gerektiğini düşünüyorum
Stan Sokolov

25

Aynı sorunu yaşadım. Çözüm işletim sistemine bağlıdır. Benim durumumda, ben debian var, bu yüzden bunu çözmek için:

  • Php sürümüm ( php5'den php7'ye ) güncellendi
  • Php-mysql ve php7.0-mysql'i yükleyin

    apt-get install php-mysql
    apt-get install php7.0-mysql
  • php.iniKonumumu /etc/php/7.0/apache2/php.ini adresinde düzenledim

    uncomment the line : extension=php_pdo_mysql.dll
  • Ardından apache'yi yeniden başlatın:

    service apache2 restart

Bu benim sorunumu çözdü


Bir kenara bu oldukça yeterli değildi ve tamamen için verilen adımları takip çalışacaktır php7 doğrulamadan önce php5 kaldırmak istemiyoruz bulan benim gibi olanlara gelince: a2dismod php5, a2enmod php7.0ve service apache2 restartnihayet beni çalışır durumda geri aldık.
depwl9992

21

Windows makinemde, php.ini dosyamdaki extension dizinine mutlak yol vermek zorunda kaldım:

extension_dir = "c:\php5\ext"


2
Bunun doğru olduğunu doğruladım (Win2008). Garip - diğer uzantılar sadece önerilenle çalışır extension_dir = "ext", ancak bu uzantıyla çalışmaz .
scipilot

burada aynı. yolu ekledi ve çalışmaya başladı. Windows10, php7.1
Chris Gibb

14

Ubuntu üzerinde sadece yürütmek

sudo apt-get install php5-mysql

1
Bir Symfony2 ve Ubuntu'nun arkasındaydım. Pdo_mysql bulunamadı ([PDOException] sürücü bulamadı). Bu sorunu çözdü.
Reinherd

2
Benim için Postgresql yoktu bu yüzden olmak sona erdi: sudo apt-get install php5-pgsql
Kzqai

@Kzqai 2:30 şimdi ve sen sadece benim sorunum çözüldü, ben mysql kullanmıyordum ben postgres kullanıyordum (> ლ)
Dheeraj

9
sudo apt-get install php-mysql 

Ubuntu ve php 7 üzerinde iyi çalıştı


Ben php7 ama php5.6 kullanmama rağmen, benim için çalıştı. Ama yüklü 7 tane var. 5.6'yı daha sonra yükledim ve php7'yi kaldırmadan buna geçtim
Abbas

9

Modülün mevcut olup olmadığını kontrol edin php -m | grep pdo_mysql.

Değilse, PHP 7.2 için, ilgili paketi sudo apt install php7.2-mysql .

Diğer PHP sürümlerinde ve paket yöneticilerinde benzer komutu kullanın.


6

Bu php.ini içine eklerken phb_pdo.dll başvuru db sürücüleri dlls önce ilk olduğundan emin olun aksi takdirde bu da bu hata iletisine neden olur. Bunları şu şekilde ekleyin:

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

2
PHP v5.3'ten beri php_pdo.dllmodül artık gerekli değil (mevcut değil). php.net/manual/tr/pdo.installation.php muhtemelen bu sorunun nihai cevabıdır.
Martin Zeitler

5

MySQL ve sürücü doğru kurulmuşsa php.ini'nizi (phpinfo () ile doğru konumu kontrol edin) kontrol ettiniz mi?


2
Ben php.ini arıyorum, ama ne aramalıyım? [MySQL]
Mike Moore

4

İçin PHP 5.5üzerine CentOSben yükleyerek bu sabit php55-mysqlndpaketi.

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

Yükleme konusunda yardım için, PHP'nin sisteminize yüklenme şekline bağlı olduğu için bir yorum yazın. Mevcut repo webtaticve vardır remi.


4

Windows 8.1 / 10'da: \\ php.ini dosyasında "extension = pdo_mysql" satırını açmalısınız


3

Benim durumumda DSN dizem yanlıştı, özellikle de mysql://. farklı bir hata mesajı beklerdim, belki de 'DSN dizesi sürücü / protokol belirtmiyor' gibi bir şey beklemiyordu.

mysql://DSN dizesinin başına eklemek sorunu çözdü.


3

Son günü neden aşağıdaki hatayı aldığımı anlamaya çalışarak geçirdim. Ubuntu 14.04 kullanıyorum.

Sorun:
PHP-CLI sürümümün php7.0 çalıştırdığını, ancak php_info () (web sürümü) php 5.5.9 görüntülediğini fark ettim. Php_info () pdo'nun etkin olduğunu söylese de, komut satırını (CLI) kullanmak pdo_mysql komutunu tanımıyordu. MySQL'in eski sürümüm için etkinleştirildiği, ancak CLI sürümünün etkinleştirildiği ortaya çıktı. Tüm yaptığım php7.0 için mysql yüklemek ve çalışmak mümkün oldu.

Bu işe yaradı:

Sürümü kontrol etmek için:

php -v

Php7.0 için mysql kurmak için

sudo apt-get install php7.0-mysql

1) CLI sürümünüzün web sürümünüzle aynı olduğundan emin olun
2) Farklıysa, varsayılan olarak gelmediğinden CLI sürümünüzün mysql eklentisine sahip olduğundan emin olun.


2

Php yapılandırma dosyasındaki extension_dir öğesinin doğru ayarlanıp ayarlanmadığını kontrol edin. Bazı uzantıları yorumlamaya / açıklamaya çalışın ve phpinfo () öğesine yansıtılıp yansıtılmadığını görün. Bunu yapmazsa, php config dosyası yüklenemez (yanlış konum) extension_dir yorumlanır veya yanlış konuma ayarlanır.


2

Sorun mysql kütüphanesine eksik bir php. CentOs ben i # yum install php-mysqlve # /bin/systemctl restart httpd.servicedebian / ubuntu tabanlı dağıtım, php-> php5 ve httpd-> apache2 farklı biraz Not ile apache çalıştırarak ve yeniden başlatarak sabit .


2

Ayrı php.ini ile testler sırasında aynı sorunu yaşadım. Bu satırları kendi php.ini dosyama eklemek zorunda kaldım:

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

Uyarı: Bu sırayla


2

Bunun mysqllndyerine mysqlnumara dönüştürme ve bit türü mysqluzantısı ile ilgili sorunu değerlendirir gibi bir sürü sorun olurdu çünkü yerine tavsiye ederim .

mysqllndaşağıdaki komutla ubuntu kurulumunda :

sudo apt-get install php5-mysqlnd

1

Debian 6'daki bu sorunu çözdüm. Normalde php5-commonpaketi yeni kurdum . Kurulumdan sonra, web sunucunuzu yeniden başlatmanız gerekir (hangisini kurduğunuza bağlı olarak apache veya nginx). Sonra sadece aşağıdaki gibi bir lsofapache işlem kimliği ( lsof -p process_id) yapmak:

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

Yukarıda görebileceğiniz gibi, modüller ortak kütüphane yolu tarafından bilinmeyen veya yönlendirilmeyen bir dosya yoluna kurulur: / usr/lib/php5/20090626/. Yüklemeniz için farklı olabilir, ancak yalnızca pdo_mysql.so, pdo.so, mysqli.so'nun yolu olabilir. Bu yüzden, Drupal veya başka bir php motoru kütüphaneyi bulamadı ve bu hatayı gösteriyor:PDOException: could not find driver

Böyle garip bir yolda yüklü neden sadece ben altındaki tüm dosyaları sembolik oluşturarak sorunu çözüldü debian 6. kütüphane paket yükleme komut sadece basit bir mikroptur benim için bilmiyorum /usr/lib/php5/20090626/için /usr/lib/php5/bu komutla:

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


php-mysql zaten en yeni sürümdür (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

Bu benim için çalıştı.


1
bir sürücü olmadan, bu kullanıcı yine aynı istisnayı alacak
eggmatters

1

Php7 paketini yüklemek için php5 paketini (tüm sürücüleri de içerir) kaldırdıktan sonra aynı sorunla karşılaştım. Aslında bir mysql modülü olmadan php7 paketi yükledim.

Terminalde yazarak çözmeyi başardım:

1) Bulduğum modülleri inceleyerek tüm modülleri listeleyen $ apt-cache search php7,

php7.0-mysql - PHP için MySQL modülü

2) $ sudo apt-get install php7.0-mysql

Bu kadar. Linux sistemimde benim için çalıştı.

(uygun php sürümünü kullanın, sizinki php5 olabilir)


1

Bazı insanlar onaylamak için başka bir şey başlamak için internetten örnek kodu kopyalayıp / yapıştırarak. Buraya MySQL girdiğinizden emin olun:

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

Bazı örneklerde bu

$dbh = new PDO ("dblib ...

1

Benim durumumda, php-cli ile PDO kullanıyordum ve iyi çalıştı.

Sadece apache'den bağlanmaya çalıştığımda, tam olarak anlamadığım "eksik sürücü" sorununu aldım.

Basit apt-get install php-mysql çözüldü. (Ubuntu 16.04 / PHP7. Krediler seçilen cevaba ve Ivan'ın yorumuna gidiyor)

Umarım yardımcı olabilir.


1

Symfony2 / 3 kullanan ve bu hatayı neden aldığınızı merak edenler için. "Mapping_types" kullanıyorsanız, bu hatayla karşılaşabilirsiniz. Nedeni "mapping_types" yanlış seviyeye yerleştirilmiş olmasıdır. Örneğin :

doctrine:
  dbal:
    mapping_types:
        set: string

Bu "mapping_types" şu seviyeye yerleştirilmelidir:

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

Umarım bu yardımcı olur

Çözümü burada buldum: https://github.com/doctrine/DoctrineBundle/issues/327


1

Gittiğim her yerde, yolunun mutlak bir yola extension_dirdönüşmesi gerektiğini okudum ext. Benim için çalıştı. Ancak, meslektaşımın PC'sinin bir sunucusunu oluşturmaya çalışırken, extmutlak bir yol koymak yerine değere izin vermek zorunda kaldım .

Mutlak bir yol koyduysanız ve uzantı hala bulunmuyorsa, hem mutlak yol hem de ile çalışmayı düşünün ext.


1

Yanlış PHP kurulumu çağrıldı

Aynı sorunu yaşıyordum. Umarım bu benim gibi bir sorunu olan birine yardımcı olur.

senaryo

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

Klasörde phpinfo.phpdosya oluşturdum publicve çalıştığım dosyanın phpinfo()konumunu aramak için php.ini.

PHP.ini Konumu = c:\xampp\php\php.ini

Sorun
Arama c:\xampp\htdocs> php -vdöndü PHP 7.2.3ama phpinfo.phpgösterdi PHP 7.2.2.

Çözüm
Aramak yerine

php artisan migrate:install   

Bana bu hatayı verdi, ben kullandım

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

ve işe yaradı.



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

"Apt install php-mysql php7toInfinity ile mücadele ettim ve mücadele ettim ve sqlite-what-ever's unutma" ve temel bilgilere geri dönüp web sitesindeki dosya izinlerini sıfırlayana kadar bu hata mesajından kurtulamadım söz konusu.

Bu 3 komut, web sitesindeki dosya ve klasör izinlerini sıfırlar ve yeniden çalışmasını sağlar.

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

Kullanmaya çalışırken de aynı istisnaydım pdo_sqlite. Sorun, otomatik olarak oluşturulan 20-pdo_sqlite.inive 20-sqlite3.inisembolik bağlantıların (in /etc/php5/mods-enabled) kesilmesiydi.

Bozuk sembolik bağlantıları kaldırmak ve aşağıdakilerle manuel olarak eklemek:

  • 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

sorunu çözdü.

Not: Bu, yapılandırmalar aramadıkları için eski php sürümleri için çalışmaz /etc/php5/mods-enabled

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.