PDOException "Impossibile trovare il driver"


292

Ho appena installato Debian Lenny con Apache, MySQL e PHP e ricevo PDOException could not find driver.

Questa è la specifica riga di codice a cui si riferisce:

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

DB_HOST, DB_NAME, DB_USER, E DB_PASSsono costanti che ho definito. Funziona bene sul server di produzione (e sulla mia precedente configurazione di Ubuntu Server).

Questo ha a che fare con la mia installazione di PHP?

La ricerca in Internet non ha aiutato, tutto quello che ottengo è scambio di esperti ed esempi, ma nessuna soluzione.


21
Cerca nella tua php.ini' file and uncomment estensione = php_pdo_mysql.dll il . The path to your file php.ini` può essere trovato guardando il tuo phpinfo ().
Styfle

3
Cordiali saluti a eventuali lettori futuri, se si ottiene questo errore e GoDaddy è l'host, accedere al proprio account amministratore. Dettagli hosting-> Linguaggi di programmazione. Aggiorna la tua versione di PHP alla versione più recente o almeno 5.4
Joe,

@Joe ho aggiornato ma ho ancora un errore (GoDaddy)
Eugen Sunic

@styfle 1up, su una macchina Linux, ho impostato extension=msql.soe funziona!
AjayKumarBasuthkar

A chi potrebbe interessare: se stai usando php 7.1+ sulla finestra mobile, puoi docker execentrare nel container ed eseguire docker-php-ext-install pdo pdo_mysql.
cleybertandre,

Risposte:


240

Devi avere un modulo chiamato pdo_mysql. In cerca di seguito in phpinfo (),

pdo_mysql

PDO Driver for MySQL, client library version => 5.1.44

2
@ZZ Coder Questo non è presente in phpinfo (). Sai come posso installare pdo_mysql?
Mike Moore,

14
@letseatfood ... Come l'hai capito? Sto avendo lo stesso problema!
Hristo,

17
Posso consigliare il pacchetto Ubuntu "php5-mysql" per l'installazione del supporto PDO per MySQL
Tom Carver,

3
Si noti che, per coloro che utilizzano Apache o altri server Web, è necessario riavviare Apache per rendere effettive le modifiche:sudo systemctl restart httpd.service
Mugoma J. Okomba,

50
Per Ubuntu 16.04 e PHP7 utilizzaresudo apt-get install php-mysql
Ivan Marjanovic il

199

La dsn nel tuo codice rivela che stai provando a connetterti con il driver mysql. Il tuo messaggio di errore indica che questo driver non è disponibile.

Verifica di avere l'estensione mysql installata sul tuo server.

In Ubuntu / Debian controlli il pacchetto con:

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

Installa il pacchetto php5-mysql se non lo possiedi.

In Ubuntu / Debian puoi usare:

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

Infine, per farlo funzionare, dovrai riavviare il tuo server web:

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

3
ahh ... il riavvio è quello che mi ha morso!
KOGI

Ho avuto lo stesso problema, assicurati di riavviare php5-fpm!
Eko3alpha,

Ho passato quasi un'intera notte a cercare di risolvere il problema, finché non ho visto la tua risposta. Aveva fatto tutto correttamente ma ho dimenticato di riavviare apache.
Mugoma J. Okomba,

php-mysql è già la versione più recente (1: 7.1 + 49 + deb.sury.org ~ xenial + 4). Quando provo a eseguire il comando sudo apt-get install php-mysql in ubuntu 16.04 con nginx php fpm, riavvio anche php fpm e quindi riavvio nginx.
Prashant Barve,

Attualmente sembra essere php-mysql e php7.1-mysql. Spero che questo sia lo schema che va avanti.
John P

83

Aggiornamento : le versioni più recenti dovrebbero usare il php-sqlite3pacchetto anziché php5-sqlite. Quindi usa questo, se stai usando una versione recente di Ubuntu:

sudo apt-get install sqlite php-sqlite3

La risposta originale alla domanda è qui:

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

Se il tuo phpinfo () non mostra la linea pdo_sqlite (nel mio caso, sul mio Ubuntu Server), devi solo eseguire le linee sopra e poi sarai a posto.


57
Perché hai dato istruzioni per sqlite quando l'OP utilizza MySQL?
Andrew Ensley,

7
@Andrew se lo usi pdo_sqlitee non lo php5-sqlitehai installato ottieni solo un PDOExceptionsenza informazioni sulla mancanza di sqlite e prova a installarlo php5-mysqldue volte.
Arriva il

2
Nota che php5-sqlite è diventato obsoleto e potrebbe non essere più disponibile per il tuo sistema, ad esempio Ubuntu 16.04. Installa invece php-sqlite3.
Matthias,

2
@briankip Certo che lo è, se stai provando a connetterti a SQLite e quel driver è mancante. Ma l'OP sta cercando di connettersi a MySQL. L'installazione di sqlite potrebbe / non potrebbe risolvere il suo problema.
Andrew Ensley,

2
@AndrewEnsley. Il titolo di questa pagina è l'errore che tutti ricevono indipendentemente dalla loro piattaforma db. Di conseguenza, questa pagina ha il più alto ranking di ricerca di Google se si google solo l'errore. Pertanto, IMO, qualsiasi risposta a questa domanda relativa ad altri database dovrebbe essere benvenuta qui. Se non funzionano per l'OP, così sia ... OP non deve accettare quelle risposte. Ciò non significa che questa risposta non sia "utile" per gli altri che indagano sul messaggio di errore nel titolo che ha regalato questa domanda al grado di ricerca di Zoltar. +1
elrobis

34

Per le versioni più recenti di Ubuntu con PHP 7.0 è possibile ottenere il php-mysqlpacchetto:

sudo apt-get install php-mysql

Quindi riavviare il server:

sudo service apache2 restart

Penso che al giorno d'oggi devi essere specifico con la versione sudo apt-get install php7.2-mysql
Stan Sokolov

25

Ho avuto lo stesso problema. La soluzione dipende dal sistema operativo. Nel mio caso, ho debian, quindi per risolverlo:

  • Aggiornato la mia versione di php da ( php5 a php7 )
  • Installa php-mysql e php7.0-mysql

    apt-get install php-mysql
    apt-get install php7.0-mysql
  • Ho modificato la mia php.inilocalizzazione su /etc/php/7.0/apache2/php.ini

    uncomment the line : extension=php_pdo_mysql.dll
  • Quindi riavviare apache:

    service apache2 restart

Questo risolve il mio problema


Per inciso per quelli come me che pensano che questa non ha del tutto sufficiente e non vogliono passare attraverso la procedura per rimuovere completamente PHP5 constatato che php7 funzionerà: a2dismod php5, a2enmod php7.0, e service apache2 restart, infine, mi ha fatto tornare operativi.
depwl9992

21

Sul mio computer Windows, ho dovuto dare il percorso assoluto alla directory extension nel mio php.ini:

extension_dir = "c:\php5\ext"


2
Ho appena confermato che ciò è vero (Win2008). Strano: le altre estensioni funzionano solo con quelle consigliate extension_dir = "ext", ma non con questa.
scipilot,

anch'io. aggiunto il percorso e iniziato a lavorare. Windows10, php7.1
Chris Gibb,

14

Su Ubuntu basta eseguire

sudo apt-get install php5-mysql

1
Ero dietro a Symfony2 e Ubuntu. Pdo_mysql non trovato ([PDOException] non è riuscito a trovare il driver). Questo ha risolto il problema.
Reinherd,

2
Per me mi mancava Postgresql e alla fine è stato:sudo apt-get install php5-pgsql
Kzqai

@Kzqai 2:30 am now e hai appena risolto il mio problema, non stavo usando mysql stavo usando postgres (> ლ)
Dheeraj

9
sudo apt-get install php-mysql 

ha funzionato bene su Ubuntu e PHP 7


Ha funzionato per me, anche se non sto usando php7 ma php5.6. Ma ne ho 7 installati. Ho installato 5.6 in seguito e sono passato a quello senza disinstallare php7
Mubashar Abbas il

9

Controllare se il modulo è disponibile con php -m | grep pdo_mysql.

In caso contrario, per PHP 7.2, è possibile installare il pacchetto pertinente con sudo apt install php7.2-mysql.

Usa un comando simile su altre versioni di PHP e gestori di pacchetti.


6

Quando li aggiungi a php.ini, assicurati che il riferimento a php_pdo.dll sia prima dei dll dei driver db, altrimenti questo causerà anche questo messaggio di errore. Aggiungili in questo modo:

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

2
da PHP v5.3 il php_pdo.dllmodulo non è più richiesto (non esiste). php.net/manual/en/pdo.installation.php è probabilmente la risposta definitiva a questa domanda.
Martin Zeitler,

5

Hai controllato php.ini (controlla la posizione corretta con phpinfo ()) se MySQL e il driver sono installati correttamente?


2
Sto cercando in php.ini, ma cosa dovrei cercare? Vedo una sezione che inizia con[MySQL]
Mike Moore,

4

Per PHP 5.5on CentOSho risolto questo installando il php55-mysqlndpacchetto.

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

Per assistenza nell'installazione, scrivi un commento poiché dipende dal modo in cui PHP è installato sul tuo sistema. I pronti contro termine disponibili sono webtatice remi.


4

per Windows 8.1 / 10 in: \\ file php.ini dovresti decommentare la riga "extension = pdo_mysql"


3

Nel mio caso la mia stringa DSN non era corretta, in particolare non conteneva mysql://. Mi sarei aspettato un messaggio di errore diverso, forse qualcosa come "La stringa DSN non specifica driver / protocollo".

L'aggiunta mysql://all'inizio della stringa DSN ha risolto il problema.


3

Ho trascorso l'ultimo giorno cercando di capire perché stavo ricevendo il seguente errore. Sto eseguendo Ubuntu 14.04.

Il problema:
ho notato che la mia versione di PHP-CLI eseguiva php7.0 ma php_info () (la versione web) visualizzava php 5.5.9. Anche se php_info () diceva che pdo era abilitato, l'uso della riga di comando (CLI) non riconosceva il comando pdo_mysql. Si scopre che mysql era abilitato per la mia vecchia versione ma non per la CLI. Tutto quello che ho fatto è stato installare mysql per php7.0 ed è stato in grado di funzionare.

Questo è ciò che ha funzionato:

Per verificare la versione:

php -v

Per installare mysql per php7.0

sudo apt-get install php7.0-mysql

1) assicurati che la tua versione della CLI sia la stessa della tua versione web
2) Se sono diversi, assicurati che la tua versione della CLI abbia il plug-in mysql poiché non viene fornito come predefinito.


2

Controlla se extension_dir nel file di configurazione php è impostato correttamente. Prova a commentare / commentare alcune estensioni e vedere se si riflette su phpinfo (). In caso contrario, non è possibile caricare il file di configurazione php (posizione errata) extension_dir è commentato o impostato nella posizione errata.


2

Il problema è un php mancante alla libreria mysql. In CentOs l'ho risolto eseguendo # yum install php-mysqle quindi riavviando apache con # /bin/systemctl restart httpd.serviceNota che la denominazione è leggermente diversa dalle distribuzioni basate su debian / ubuntu, php-> php5 e httpd-> apache2.


2

Ho avuto lo stesso problema durante l'esecuzione dei test con php.ini separato. Ho dovuto aggiungere queste righe al mio file php.ini:

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

Avviso: esattamente in questo ordine


2

Consiglio vivamente mysqllndinvece che a mysqlcausa tua avrebbe molti problemi come la conversione dei numeri e il tipo di bit valuta il problema con l' mysqlestensione.

su Ubuntu installare mysqllndcon il seguente comando:

sudo apt-get install php5-mysqlnd

1

Ho risolto questo problema sul mio Debian 6. Normalmente avevo appena installato un php5-commonpacchetto. Dopo l'installazione, è necessario riavviare il server Web (apache o nginx a seconda di quello installato). Quindi faccio semplicemente un lsofid del processo apache ( lsof -p process_id) come segue:

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

Come puoi vedere sopra, i moduli sono installati su un percorso file non conosciuto o guidato dal percorso libreria comune: / usr/lib/php5/20090626/. Per la tua installazione, potrebbe essere diverso, ma solo il percorso di pdo_mysql.so, pdo.so, mysqli.so. Quindi, questo è il motivo per cui Drupal o qualsiasi altro motore php non sono riusciti a trovare la libreria e mostrano questo errore:PDOException: could not find driver

Io proprio non so il motivo per cui è installato su un percorso così strana, per me è solo un bug nello script di installazione del pacchetto biblioteca in debian 6. Ho risolto il problema creando un simbolico per tutti i file sotto /usr/lib/php5/20090626/a /usr/lib/php5/con questo comando:

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


php-mysql è già la versione più recente (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

Questo ha funzionato per me.


1
senza un driver, questo utente otterrà comunque la stessa eccezione
eggmatters

1

Ho riscontrato lo stesso problema dopo aver rimosso il pacchetto php5 (che include anche tutti i driver) per installare il pacchetto php7. In realtà ho installato il pacchetto php7 senza un modulo mysql.

Sono riuscito a risolverlo digitando il terminale:

1) $ apt-cache search php7 che elenca tutti i moduli, guardando attraverso i moduli che ho trovato,

php7.0-mysql - Modulo MySQL per PHP

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

Questo è tutto. Ha funzionato per me nel mio sistema Linux.

(usa la versione php appropriata, la tua potrebbe essere php5)


1

Solo un'altra cosa da confermare poiché alcune persone stanno copiando / incollando il codice di esempio da Internet per iniziare. Assicurati di aver inserito MySQL qui:

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

In alcuni esempi questo dimostra

$dbh = new PDO ("dblib ...

1

Nel mio caso, stavo usando DOP con php-cli, e ha funzionato bene.

Solo quando ho provato a connettermi da Apache, ho riscontrato il problema del "driver mancante", che non ho capito bene.

Un semplice apt-get install php-mysqlrisolto. (Ubuntu 16.04 / PHP7. Crediti vanno alla risposta selezionata e al commento di Ivan)

Spero possa essere d'aiuto.


1

Per quelli che usano Symfony2 / 3 e si chiedono perché stai ricevendo questo errore. Se stai utilizzando "mapping_types", potresti riscontrare questo errore. Il motivo è che "mapping_types" è collocato al livello sbagliato. Per esempio :

doctrine:
  dbal:
    mapping_types:
        set: string

Questo "mapping_types" deve essere posizionato a questo livello:

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

Spero che aiuti

Ho trovato la soluzione qui: https://github.com/doctrine/DoctrineBundle/issues/327


1

Ovunque io vada, leggo che il percorso di extension_dirdovrebbe essere cambiato da extin un percorso assoluto. Ha funzionato per me. Tuttavia, quando ho cercato di costruire un server del PC del mio collega, ho dovuto lasciare che il valore fosse extinvece di mettere un percorso assoluto.

Se hai inserito un percorso assoluto e lo fa l'estensione non è stata ancora trovata, considera sia il percorso assoluto sia quello ext.


1

È stata chiamata l'installazione errata di PHP

Stavo riscontrando lo stesso problema. E spero che questo possa aiutare qualcuno che ha un problema simile al mio.

Scenario

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

Ho creato il phpinfo.phpfile nella publiccartella ed eseguito il phpinfo()per cercare la posizione del mio php.inifile.

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

Problema di
chiamata c:\xampp\htdocs> php -vrestituito PHP 7.2.3ma phpinfo.phpmostrato PHP 7.2.2.

Soluzione
Invece di chiamare

php artisan migrate:install   

che mi ha dato questo errore, ho usato

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

e ha funzionato.



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

Ho lottato e lottato con "apt install php-mysql php7toInfinity e non dimenticare sqlite-what-ever's" e non riuscivo a sbarazzarmi di questo messaggio di errore fino a quando non sono tornato alle origini e ripristinato i permessi dei file sul sito web in questione.

Questi 3 comandi ripristinano le autorizzazioni per file e cartelle sul sito Web e lo fanno funzionare di nuovo.

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

Ho avuto la stessa eccezione quando ho provato a usare pdo_sqlite. Il problema era che i collegamenti creati automaticamente 20-pdo_sqlite.inie 20-sqlite3.inisymlink (in /etc/php5/mods-enabled) erano rotti.

Rimuovere i collegamenti simbolici non funzionanti e aggiungerli manualmente con:

  • 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

risolto il problema.

Nota: questo non funzionerà con le versioni php precedenti in quanto non hanno cercato le configurazioni /etc/php5/mods-enabled

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.