ejemplo conexion php mysql pdo lamp

conexion - pdo php mysql ejemplo



PDOException "no se pudo encontrar el controlador" (30)

¿Revisó su php.ini (verifique la ubicación correcta con phpinfo ()) si MySQL y el controlador están instalados correctamente?

Acabo de instalar Debian Lenny con Apache, MySQL y PHP y recibo una excepción 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).

¿Es esto algo que ver con mi instalación de PHP?

La búsqueda en Internet no ha ayudado, todo lo que obtengo son expertos, intercambio de ideas y ejemplos, pero no soluciones.


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 es así, no 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.


Cuando los agregue a su php.ini, asegúrese de que la referencia a php_pdo.dll sea la primera antes que las dll dbs de la db; de lo contrario, esto también provocará este mensaje de error. Agrégalos así:

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


Donde quiera que vaya, leo que la ruta de extension_dir debe cambiarse de ext a una ruta absoluta. Funcionó para mí. Sin embargo, al intentar construir un servidor de la PC de mi colega, tuve que dejar que el valor se ext lugar de poner una ruta absoluta.

Si colocó una ruta absoluta y la extensión aún no se encuentra, considere la posibilidad de intentar tanto con la ruta absoluta como con la ext .


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.

Comprueba que tienes la extensión mysql instalada en tu servidor.

En Ubuntu / Debian comprueba 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 que funcione, deberá reiniciar su servidor web:

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

El problema es que falta un php a la biblioteca mysql. En CentOs lo arreglé ejecutando # yum install php-mysql y luego reiniciando apache con # /bin/systemctl restart httpd.service Tenga en cuenta que la denominación es ligeramente diferente de las distribuciones basadas en debian / ubuntu, php-> php5 y httpd-> apache2 .


En Ubuntu solo ejecuta

sudo apt-get install php5-mysql


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

Solo cuando intenté conectarme desde Apache, tuve el problema del "controlador faltante", que no entendí del todo.

Un simple 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.


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

Al agregar mysql:// al principio de la cadena DSN se resolvió el problema.


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

extension_dir = "c:/php5/ext"


Me encontré con el mismo problema después de quitar 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 tecleando en el terminal:

1) $ apt-cache search php7 que enumera todos los módulos, revisando los módulos que encontré,

php7.0-mysql - módulo MySQL para PHP

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

Eso es. Funcionó para mí en mi sistema Linux.

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


Necesitas tener un módulo llamado pdo_mysql. Buscando seguir en phpinfo (),

pdo_mysql PDO Driver for MySQL, client library version => 5.1.44


Para PHP 5.5 en CentOS solucioné 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 para 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 .


Para Linux Mint

Tuve el mismo problema al usar PhpBrew (5.5.9 / 7.0.14) y al intentar crear una conexión PDO.

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

  1. Apagado PhpBrew

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


Para aquellos que usan Symfony2 / 3 y se preguntan por qué está 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 :

doctrine: dbal: mapping_types: set: string

Este "mapping_types" se debe colocar 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


Para las versiones más nuevas 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


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 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, el uso de la línea de comandos (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 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 de CLI sea la misma que su versión web
2) Si son diferentes, asegúrese de que la versión de su CLI tenga el complemento mysql, ya que no viene con el predeterminado.


Recomiendo sumamente mysqllnd lugar de mysql ya que tendrías muchos problemas, como la conversión de números y el tipo de bit que evalúa el problema con la extensión de mysql .

en ubuntu, instale mysqllnd con el siguiente comando:

sudo apt-get install php5-mysqlnd


Si está utilizando sqlite para realizar pruebas, necesitará php sqlite pdo drive. Puede instalarlos como 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


Si lees todas las respuestas anteriores y aún no funciona ...

Asegúrese de que su cadena de conexión de PHP PDO está bien. No como el mio

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

No hay información en el mensaje de error que no se encontró el controlador.

Después de reinstalar todas las bibliotecas de PDO y MySQL posibles, descubrí que había " al inicio de mi cadena de conexión.


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 ...


Solucioné este problema en mi Debian 6. Normalmente, acababa de instalar php5-common paquete php5-common . Después de la instalación, debe reiniciar su servidor web (apache o nginx, dependiendo de cuál haya instalado). Luego simplemente hago un lsof en el id del 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 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 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 la biblioteca en Debian 6. Resolví el problema creando un símbolo para todos los archivos en /usr/lib/php5/20090626/ a /usr/lib/php5/ con este comando:

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


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

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

Aviso: Exactamente en este orden.


Tuve el mismo problema. La solución depende del sistema operativo. En mi caso, tengo debian, así que para resolverlo:

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

    apt-get install php-mysql apt-get install php7.0-mysql

  • Edité mi php.ini en /etc/php/7.0/apache2/php.ini

    uncomment the line : extension=php_pdo_mysql.dll

  • Luego reinicie apache:

    service apache2 restart

Esto resuelve mi problema


Tuve la misma excepción al intentar usar pdo_sqlite . El problema era que los enlaces simbólicos 20-pdo_sqlite.ini y 20-sqlite3.ini creados automáticamente (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

arreglado el problema

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


para Windows 8.1 / 10 en: // php.ini file, debe descomentar la línea "extension = pdo_mysql"


Actualización : las versiones más nuevas deben usar php-sqlite3 paquete php-sqlite3 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 de Ubuntu), solo necesita ejecutar las líneas de arriba y estará listo.


Se estaba llamando a la 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

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

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

Ubicación de PHP.ini = c:/xampp/php/php.ini

Problema
Llamar a c:/xampp/htdocs> php -v devolvió PHP 7.2.3 pero phpinfo.php mostró PHP 7.2.2 .

Solución
En lugar de llamar

php artisan migrate:install

Lo que me dio este error, lo utilicé.

c:/xampp/php/php artisan migrate:install

Y funcionó.


$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í.


sudo apt-get install php-mysql

Funcionó bien en Ubuntu y PHP 7