Acabo de instalar Debian Lenny con Apache, MySQL y PHP y estoy recibiendo una PDOException could not find driver
.
Esta es la línea de código específica 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).
¿Tiene esto algo que ver con mi instalación de PHP?
Buscar en Internet no ha ayudado, todo lo que obtengo es intercambio de expertos y ejemplos, pero no soluciones.
php.ini' file and uncomment
extensión = php_pdo_mysql.dll. The path to your
El archivo php.ini` se puede encontrar mirando su phpinfo ().extension=msql.so
y ¡funciona!docker exec
ingresar al contenedor y ejecutardocker-php-ext-install pdo pdo_mysql
.Respuestas:
Necesita tener un módulo llamado pdo_mysql. Buscando seguir en phpinfo (),
fuente
pdo_mysql
?sudo systemctl restart httpd.service
sudo apt-get install php-mysql
El dsn en su código revela que está intentando conectarse con el controlador mysql. Su mensaje de error indica que este controlador no está disponible.
Compruebe que tiene instalada la extensión mysql en su servidor.
En Ubuntu / Debian verifica el paquete con:
Instale el paquete php5-mysql si no lo tiene.
En Ubuntu / Debian puedes usar:
sudo apt-get install php5-mysql
sudo apt-get install php7.0-mysql
Por último, para que funcione, deberá reiniciar su servidor web:
sudo /etc/init.d/apache2 restart
sudo /etc/init.d/nginx restart
fuente
Actualización : las versiones más nuevas deberían usar el
php-sqlite3
paquete en lugar dephp5-sqlite
. Entonces use esto, si está usando una versión reciente de ubuntu:La respuesta original a la pregunta está aquí:
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 estará listo para comenzar.
fuente
pdo_sqlite
y no instalóphp5-sqlite
, solo obtiene unPDOException
sin información sobre sqlite faltante e intenta instalarphp5-mysql
dos veces.Para las versiones más nuevas de Ubuntu que tienen PHP 7.0, puede obtener el
php-mysql
paquete:Luego reinicie su servidor:
fuente
Tuve el mismo problema. La solución depende del sistema operativo. En mi caso, tengo Debian, así que para resolverlo:
Instalar php-mysql y php7.0-mysql
Edité mi
php.ini
ubicación en /etc/php/7.0/apache2/php.iniLuego reinicie apache:
Esto resuelve mi problema
fuente
a2dismod php5
,a2enmod php7.0
yservice apache2 restart
finalmente me hizo volver a funcionar.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"
fuente
extension_dir = "ext"
, pero no con esta.En Ubuntu solo ejecuta
fuente
sudo apt-get install php5-pgsql
funcionó bien en ubuntu y php 7
fuente
Compruebe si el módulo está disponible con
php -m | grep pdo_mysql
.Si no, para PHP 7.2, puede instalar el paquete relevante con
sudo apt install php7.2-mysql
.Utilice comandos similares en otras versiones de PHP y gestores de paquetes.
fuente
Al agregarlos a su php.ini, asegúrese de que la referencia php_pdo.dll sea primero antes que los db drivers dlls; de lo contrario, esto también causará este mensaje de error. Añádelos así:
fuente
php_pdo.dll
módulo ya no es necesario (ya no existe). php.net/manual/en/pdo.installation.php es probablemente la respuesta definitiva a esta pregunta.¿Revisó su php.ini (verifique la ubicación correcta con phpinfo ()) si MySQL y el controlador están instalados correctamente?
fuente
[MySQL]
Para
PHP 5.5
elCentOS
arreglé esto instalando elphp55-mysqlnd
paquete.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
yremi
.fuente
para Windows 8.1 / 10 en: \\ php.ini archivo, debe descomentar la línea "extension = pdo_mysql"
fuente
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 'La cadena DSN no especifica el controlador / protocolo'.Agregar
mysql://
al comienzo de la cadena DSN resolvió el problema.fuente
Pasé el último día tratando de descubrir por qué recibía el siguiente error. Estoy ejecutando Ubuntu 14.04.
El problema:
noté que mi versión de PHP-CLI ejecutaba php7.0 pero php_info () (la versión web) mostraba php 5.5.9. Aunque php_info () dijo que pdo estaba habilitado, usar la línea de comando (CLI) no reconocía 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 funcionar.
Esto es lo que funcionó:
Para verificar la versión:
Para instalar mysql para php7.0
1) asegúrese de que su versión de CLI sea 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 por defecto.
fuente
Compruebe si extension_dir en el archivo de configuración de php está configurado correctamente. Intente comentar / descomentar algunas extensiones y ver si se refleja en phpinfo (). Si no lo hace, tampoco se puede cargar el archivo de configuración de php (ubicación incorrecta) extension_dir se comenta o se establece en la ubicación incorrecta.
fuente
El problema es una falta de php a la biblioteca mysql. En CentOs lo arreglé ejecutando
# yum install php-mysql
y luego reiniciando apache con# /bin/systemctl restart httpd.service
Note que el nombre es ligeramente diferente de las distribuciones basadas en debian / ubuntu, php-> php5 y httpd-> apache2.fuente
Tuve el mismo problema durante la ejecución de pruebas con php.ini por separado. Tuve que agregar estas líneas a mi propio archivo php.ini:
Aviso: exactamente en este orden
fuente
Lo recomiendo extremadamente en
mysqllnd
lugar demysql
porque tendría muchos problemas como la conversión de números y el tipo de bit evalúa el problema conmysql
extensión.en ubuntu instalar
mysqllnd
con el siguiente comando:fuente
Solucioné este problema en mi Debian 6. Normalmente, acababa de instalar el
php5-common
paquete. Después de la instalación, debe reiniciar su servidor web (apache o nginx dependiendo de cuál instaló). Luego solo hago unlsof
id en el proceso apache (lsof -p process_id
) como sigue:Como puede ver arriba, los módulos se instalan en una ruta de archivo desconocida o guiada por una ruta de biblioteca común: /
usr/lib/php5/20090626/
. Para su instalación, puede ser diferente, pero solo la ruta de pdo_mysql.so, pdo.so, mysqli.so. Entonces, esta es la razón por la cual Drupal o cualquier otro motor php no pudo encontrar la biblioteca y muestra ese error:PDOException: could not find driver
Sólo que no sé por qué se instala en un camino tan extraño, para mí es sólo un error en la biblioteca de scripts de instalación de paquetes en debian 6. He resuelto el problema mediante la creación de 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/
fuente
Esto funcionó para mí.
fuente
Me enfrenté al mismo problema después de eliminar el paquete php5 (que también incluye todos los controladores) para instalar el paquete php7. De hecho, instalé el paquete php7 sin un módulo mysql.
Logré resolverlo escribiendo en la terminal:
1) $ 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) $ sudo apt-get install php7.0-mysql
Eso es. Me funcionó en mi sistema Linux.
(use la versión adecuada de php, la suya podría ser php5)
fuente
Solo una cosa más para confirmar, ya que algunas personas están copiando / pegando el código de ejemplo de Internet para comenzar. Asegúrese de haber ingresado MySQL aquí:
En algunos ejemplos esto muestra
fuente
En mi caso, estaba usando PDO con php-cli, y funcionó bien.
Solo cuando intenté conectarme desde Apache, recibí el problema del "controlador perdido", que no entendí del todo.
Un simple lo
apt-get install php-mysql
resolvió. (Ubuntu 16.04 / PHP7. Los créditos van a la respuesta seleccionada y al comentario de Ivan)Espero que pueda ayudar.
fuente
Para aquellos que usan Symfony2 / 3 y se preguntan por qué están recibiendo este error. Si está utilizando "mapping_types", puede encontrar este error. La razón es que "mapping_types" se coloca en el nivel incorrecto. Por ejemplo :
Este "mapping_types" debe colocarse en este nivel:
espero que esto ayude
Encontré la solución aquí: https://github.com/doctrine/DoctrineBundle/issues/327
fuente
Donde quiera que vaya leo que la ruta de
extension_dir
debería cambiarse deext
una ruta absoluta. Funcionó para mi. Sin embargo, al intentar construir un servidor de la PC de mi colega, tuve que dejar que el valor enext
lugar de poner una ruta absoluta.Si puso una ruta absoluta y lo hace, la extensión aún no se encuentra, considere intentar con la ruta absoluta y
ext
.fuente
Se estaba llamando a una instalación incorrecta de PHP
Estaba experimentando el mismo problema. Y espero que esto ayude a alguien que tiene un problema similar al mío.
Guión
Creé el
phpinfo.php
archivo en lapublic
carpeta y ejecuté elphpinfo()
para buscar la ubicación de miphp.ini
archivo.PHP.ini Ubicación =
c:\xampp\php\php.ini
Problema La
llamada
c:\xampp\htdocs> php -v
volvióPHP 7.2.3
pero sephpinfo.php
mostróPHP 7.2.2
.Solución en
lugar de llamar
que me dio este error, usé
Y funcionó.
fuente
Verifique la ruta correcta en extension_dir en phpinfo ().
fuente
Luché y luché con "apt install php-mysql php7toInfinity y no olvides sqlite-what-ever's" y simplemente no pude deshacerme de este mensaje de error hasta que volví a lo básico y restablecí los permisos de archivo en el sitio web en cuestión.
Estos 3 comandos restablecen los permisos de archivos y carpetas en el sitio web y hacen que vuelva a funcionar.
fuente
Tuve la misma excepción al intentar usar
pdo_sqlite
. El problema era que el creado automáticamente20-pdo_sqlite.ini
y los20-sqlite3.ini
enlaces simbólicos (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
Se solucionó el problema.
fuente