PDOException " no se pudo encontrar el controlador"


Acabo de instalar Debian Lenny con Apache, MySQL y PHP y estoy recibiendo una PDOException could not find driver.

Esta es la línea específica de código a la que se refiere:

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

DB_HOST, DB_NAME, DB_USER, y DB_PASS son constantes que he definido. Funciona bien en el servidor de producción (y en mi configuración anterior de Ubuntu Server).

¿Esto tiene que ver con mi instalación de PHP?

Buscar en Internet no ha ayudado, todo lo que consigo es intercambio de expertos y ejemplos, pero no soluciones.

Author: ghbarratt, 2010-05-18

30 answers

Necesita tener un módulo llamado pdo_mysql. Buscando el siguiente en phpinfo (),

pdo_mysql

PDO Driver for MySQL, client library version => 5.1.44
 186
Author: ZZ Coder,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-05-17 21:33:55

El dsn en su código revela que está tratando de conectarse con el controlador mysql. Su mensaje de error indica que este controlador no está disponible.

Compruebe que tiene la extensión mysql instalada en su servidor.

En Ubuntu / Debian se busca el paquete con:

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

Instale el paquete php5-mysql si no lo tiene.

En Ubuntu / Debian puedes usar:

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

Por último, para conseguirlo trabajando, tendrá que reiniciar su servidor web:

  • Apache: sudo /etc/init.d/apache2 restart
  • Nginx: sudo /etc/init.d/nginx restart
 168
Author: ghbarratt,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-10-04 20:16:54

Actualizar : las versiones más recientes deben usar el paquete php-sqlite3 en lugar de php5-sqlite. Así que usa esto, si estás usando una versión reciente de ubuntu:

sudo apt-get install sqlite php-sqlite3

La respuesta original a la pregunta está aquí:

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

Si su phpinfo() no muestra la línea pdo_sqlite (en mi caso, en mi servidor Ubuntu), solo necesita ejecutar las líneas anteriores y entonces estará listo.

 68
Author: Sudipta Chatterjee,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-02-28 17:56:38

Para las versiones más recientes de Ubuntu que tienen PHP 7.0 puede obtener el paquete php-mysql:

sudo apt-get install php-mysql

Luego reinicie su servidor:

sudo service apache2 restart
 21
Author: FinkAvenue,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-08-19 06:28:20

En mi máquina Windows, tuve que dar la ruta absoluta al directorio de extensión en mi php.ini:

extension_dir = "c:\php5\ext"

 20
Author: berdzi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-06-10 23:18:17

En Ubuntu basta con ejecutar

sudo apt-get install php5-mysql
 14
Author: Dmitry Sobolev,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-04-16 13:22:48

Tuve el mismo problema. La solución depende de la OS. En mi caso, tengo debian, así que para resolverlo:

  • Actualizado mi versión de php de (php5 a php7 )
  • Instalar php-mysql y php7.0-mysql

    apt-get install php-mysql
    apt-get install php7.0-mysql
    
  • He editado mi php.ini localizar en /etc/php/7.0/apache2/php.ini

    uncomment the line : extension=php_pdo_mysql.dll
    
  • Luego reinicia apache:

    service apache2 restart
    

Esto resuelve mi problema

 13
Author: onlyme,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-05-23 07:53:35
sudo apt-get install php-mysql 

Funcionó bien en ubuntu y php 7

 8
Author: Moses Nandwa,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-05-12 09:11:08

¿has comprobado tu php.ini (compruebe la ubicación correcta con phpinfo ()) si MySQL y el controlador están instalados correctamente?

 5
Author: cem,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-05-17 21:08:39

Al agregar estos en su php.ini asegura el php_pdo.la referencia dll es la primera antes de los dlls de los controladores de base de datos, de lo contrario, esto también causará este mensaje de error también. Agrégalos así:

[PHP_PDO]
extension=php_pdo.dll
[PHP_PDO_MYSQL]
extension=php_pdo_mysql.dll
 5
Author: Paul Foster,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-11-17 23:52:40

Para PHP 5.5 en CentOS Arreglé esto instalando el paquete php55-mysqlnd.

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

Para obtener ayuda con la instalación, escriba un comentario, ya que depende de la forma en que PHP está instalado en su sistema. Los repositorios disponibles son webtatic y remi.

 4
Author: SimonW,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-07-23 09:22:50

Pasé el último día tratando de averiguar por qué estaba recibiendo el siguiente error. Estoy ejecutando Ubuntu 14.04.

El Problema:
Noté que mi versión PHP-CLI estaba corriendo php7.0 pero php_info() (la versión web) estaba mostrando php 5.5.9. Aunque php_info () dijo que pdo estaba habilitado, usar la línea de comandos (CLI) no estaba reconociendo el comando pdo_mysql. Resulta que mysql estaba habilitado para mi versión anterior, pero no para la versión CLI. Todo lo que hice fue instalar mysql para php7. 0 y fue capaz de trabajar.

Esto es lo que funcionó:

Para comprobar la versión:

php -v

Para instalar mysql para php7.0

sudo apt-get install php7.0-mysql

1) asegúrese de que su versión CLI es la misma que su versión web
2) Si son diferentes, asegúrese de que su versión de CLI tenga el complemento mysql, ya que no viene con él como predeterminado.

 3
Author: Growling Flea,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-01-04 20:37:17

Compruebe si extension_dir en el archivo de configuración php establecido correctamente. Trate de comentar / descomentar algunas extensiones y ver si se refleja en phpinfo(). Si no lo hace, entonces el archivo de configuración php no se puede cargar (ubicación incorrecta) extension_dir se comenta o se establece en la ubicación incorrecta.

 2
Author: hserge,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-08-18 14:02:30

En mi caso, mi cadena DSN era incorrecta, específicamente no contenía mysql://. Hubiera esperado un mensaje de error diferente, tal vez algo como 'Cadena DSN no especifica controlador/protocolo.'

Añadiendo mysql:// al principio de la cadena DSN se resolvió el problema.

 2
Author: gposton,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-10-20 14:46:28

El problema es que falta una biblioteca de php a mysql. En CentOS lo arreglé ejecutando # yum install php-mysql y luego reiniciar apache con # /bin/systemctl restart httpd.service Tenga en cuenta que el nombre es ligeramente diferente de las distribuciones basadas en debian/ubuntu, php->php5 y httpd->apache2.

 2
Author: Japheth Ongeri - inkalimeva,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-12-08 06:36:53

Recomiendo extremadamente mysqllnd en lugar de mysql porque tendría muchos problemas como la conversión de números y el tipo de bit evalúa el problema con la extensión mysql.

En ubuntu install mysqllnd con el siguiente comando:

sudo apt-get install php5-mysqlnd
 2
Author: MSS,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-09-17 17:21:17

Solucioné este problema en mi Debian 6. Normalmente solo había instalado el paquete php5-common. Después de la instalación, debe reiniciar su servidor web (apache o nginx dependiendo del que haya instalado). Entonces solo hago un lsof en el id de proceso de apache (lsof -p process_id) como sigue:

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

Como puede ver anteriormente, los módulos se instalan en una ruta de archivo no conocida o guiada por la ruta común de la biblioteca: /usr/lib/php5/20090626/. Para su instalación, puede ser diferente, pero solo el camino de pdo_mysql.so, pdo.so, mysqli.so Por lo tanto, esta es la razón por la que Drupal o cualquier otro motor php no pudo encontrar la biblioteca y muestra ese error: PDOException: could not find driver

Simplemente no sé por qué está instalado en una ruta tan extraña, para mí es solo un error en el script de instalación del paquete de bibliotecas en Debian 6. Resolví el problema creando un símbolo para todos los archivos bajo /usr/lib/php5/20090626/ para /usr/lib/php5/ con este comando :

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

 1
Author: douggynix,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-06-10 23:34:05
$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

Esto funcionó para mí.

 1
Author: Persianuser,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-06-10 23:43:27

Me enfrenté al mismo problema después de eliminar el paquete php5 (que también incluye todos los controladores) para instalar el paquete php7. En realidad instalé el paquete php7 sin un módulo mysql.

Logré resolverlo escribiendo en el terminal:

1) apt apt-cache search php7 que enumera todos los módulos, mirando a través de los módulos que encontré,

Php7. 0-mysql - Módulo MySQL para PHP

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

Eso es todo. Funcionó para mí en mi sistema linux.

(use la versión apropiada de php, la suya podría ser php5)

 1
Author: Roshimon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-05-10 13:04:15

Solo una cosa más para confirmar, ya que algunas personas están copiando/pegando código de ejemplo de Internet para comenzar. Asegúrese de tener MySQL ingresado aquí:

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

En algunos ejemplos esto muestra

$dbh = new PDO ("dblib ...
 1
Author: Joe,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-06-29 04:33:48

Tuve el mismo problema durante la ejecución de pruebas con php separado.ini. Tuve que añadir estas líneas a mi propio php.archivo ini:

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

Aviso: Exactamente en este orden

 1
Author: Facedown,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-07-23 15:04:57

En mi caso, estaba usando PDO con php-cli, y funcionó bien.

Solo cuando intenté conectarme desde apache, obtuve el problema de "controlador perdido", que no entendí del todo.

Un simple apt-get install php-mysql lo resolvió. (Ubuntu 16.04 / PHP7. los créditos van a la respuesta seleccionada y el comentario de Ivan)

Espero que pueda ayudar.

 1
Author: Balmipour,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-10-31 14:46:14

Para aquellos que usan Symfony2/3 y se preguntan por qué está recibiendo este error. Si está utilizando "mapping_types", es posible que encuentre este error. La razón es que "mapping_types" se coloca en el nivel equivocado. Por ejemplo :

doctrine:
  dbal:
    mapping_types:
        set: string

Este " mapping_types "debe colocarse en este nivel:

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

Espero que esto ayude

Encontré la solución aquí : https://github.com/doctrine/DoctrineBundle/issues/327

 1
Author: aneth101,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-02-17 20:07:36

Para Windows 8.1 / 10 en :\\php.archivo ini debe descomentar la línea "extension = pdo_mysql"

 1
Author: Egor Doynikov,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-12-19 16:18:28

Tuve la misma excepción al intentar usar pdo_sqlite. El problema era que los enlaces simbólicos creados automáticamente 20-pdo_sqlite.ini y 20-sqlite3.ini (en /etc/php5/mods-enabled) estaban rotos.

Eliminar los enlaces simbólicos rotos y agregarlos 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

Solucionado el problema.

Nota: esto no funcionará para versiones anteriores de php, ya que no buscaron configuraciones en /etc/php5/mods-enabled

 0
Author: ioleo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-09-05 13:38:58

Si está utilizando sqlite para probar, necesitará la unidad pdo php sqlite. Puede instalarlos como se muestra a continuación.

Para Ubuntu 14.04

sudo apt-get install php5-sqlite
sudo service apache2 restart

En ubuntu 16.04 no hay php5-sqlite

sudo apt-get install php7.0-sqlite
sudo service apache2 restart
 0
Author: Web Developer in Pune,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-10-19 12:08:16

Para Linux Mint

Tuve el mismo problema mientras usaba PhpBrew ( 5.5.9 / 7.0.14 ) e intentaba crear una conexión PDO.

Después de haber probado la mayoría de las soluciones en este post hice lo siguiente:

  1. Powered off PhpBrew

  2. Ejecutado sudo apt-get install php7.0 (Linux Mint 17.2 / PHP7. 0. 16) - instalado nueva versión de php

 0
Author: Andrei .K,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-02-28 12:06:53

Dondequiera que voy leo que el camino de extension_dir debe ser cambiado de ext a un camino absoluto. Funcionó para mí. Sin embargo, al intentar construir un servidor de la PC de mi colega, tuve que dejar el valor a ext en lugar de poner una ruta absoluta.

Si usted puso una ruta absoluta y lo hace la extensión todavía no se encuentra, considerer tratando tanto con la ruta absoluta y ext.

 0
Author: gentil papillon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-02-13 10:42:57

Instalación incorrecta de PHP fue llamada

Yo estaba experimentando el mismo problema. Y espero que esto ayude a alguien que está teniendo un problema similar a mí.

Hipótesis

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

Creé el archivo phpinfo.php en la carpeta public y ejecuté el phpinfo() para buscar la ubicación de mi archivo php.ini.

PHP.ubicación ini = c:\xampp\php\php.ini

Problema
Calling c:\xampp\htdocs> php -v returned PHP 7.2.3 but phpinfo.php showed PHP 7.2.2.

Solución
En lugar de llamar

php artisan migrate:install   

Que me dio este error, usé {[15]]}

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

Y funcionó.

 0
Author: SollyM,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-09-21 10:21:00

Tuvo el mismo problema y simplemente calculó que el sitio web se está ejecutando bajo el php de MAMP, pero cuando llama al comando, ejecuta el mac(si no se modifica la ruta de bash). tendrá problemas cuando Mac no tenga esas extensiones.

Ejecute php-i para averiguar las extensiones cargadas, e instale aquellas que se perdió. o ejecutar " /Applications/MAMP/bin/php/php5.3.6/bin/php artisan {comando}' para uso MAMP del

 -2
Author: Entrust,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-04-02 11:37:03