Foros del Web » Programando para Internet » PHP »

PDO ignora el driver mysql

Estas en el tema de PDO ignora el driver mysql en el foro de PHP en Foros del Web. Hola a todos, soy Jorge: Tengo la siguiente configuración: apache2.2.14, php 5.3.1, mysql server 5.1 y phpdesigner 7 en windows 7. Desde que reinstalé el ...
  #1 (permalink)  
Antiguo 10/01/2010, 16:41
 
Fecha de Ingreso: abril-2005
Ubicación: Ramos Mejía
Mensajes: 113
Antigüedad: 19 años
Puntos: 0
PDO ignora el driver mysql

Hola a todos, soy Jorge:

Tengo la siguiente configuración: apache2.2.14, php 5.3.1, mysql server 5.1 y phpdesigner 7 en windows 7.

Desde que reinstalé el windows 7 por cambio de hardware no he podido hacer funcionar mis scrips de php. Más concretamente los que usan PDO.

He creado un script de prueba:

Código PHP:
   <?php
      
echo "MYSQL PDO DRIVER CHECK<br />";
      
      
print_r(PDO::getAvailableDrivers());
      
$db=null;
      try{
          
// Nos conectamos.
          
$db = new PDO("mysql:host=localhost;dbname=test""root""admin");
        if (
$db != null ){
          echo 
"no definido";
        }
      }catch(
PDOException $e){
          echo 
$e->getMessage()."<br />";
      }
      
      if (
$db->getAttribute(PDO::ATTR_DRIVER_NAME) == 'mysql') {
          
$stmt $db->prepare('select * from items',
              array(
PDO::MYSQL_ATTR_USE_BUFFERED_QUERY => true));
      } else {
          die(
"my application only works with mysql; I should use \$ stmt->fetchAll() instead");
      }
?>

El resultado es el siguiente:

MYSQL PDO DRIVER CHECK
Array ( [0] => mysql [1] => odbc [2] => sqlite ) no definido

Tengo todos los Paths correctamente dirigidos, todos los dlls y no tengo otros programas que estorben.

Estoy francamente desorientado y perdido ya que me dice que $db no existe o mejor dicho que cualquier método que use sobre $db está siendo llamado sobre un NO OBJETO.

Si alquien tiene una pista sería de gran ayuda dado que ya hace 3 semanas se presentó este problema y no lo he podido resolver.

[email protected] es mi correo, les pido que se mantengan en contacto.
  #2 (permalink)  
Antiguo 10/01/2010, 22:16
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 11 meses
Puntos: 1517
Respuesta: PDO ignora el driver mysql

Te aseguraste que estas modificando el php.ini correcto, ademas mira las extensiones que tienes que activar por si las dudas http://www.php.net/manual/en/pdo.installation.php
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #3 (permalink)  
Antiguo 11/01/2010, 12:29
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: PDO ignora el driver mysql

De hecho tu código hace lo que le pide ya que tu if dice: if ($db != null) por eso te dice no definido, prueba ejecutar uno de los códigos de prueba de la pagina de PDO.

El var_dump de available drivers dice que ya tienes MySQL instalado.

Saludos.
  #4 (permalink)  
Antiguo 11/01/2010, 13:47
 
Fecha de Ingreso: abril-2005
Ubicación: Ramos Mejía
Mensajes: 113
Antigüedad: 19 años
Puntos: 0
GatorV, el if ($db != null) es irrelevante dado que fue una prueba inversa a cómo debía ser. Normalmente hago todo en doble sentido para verificarlo mejor.

Sacar ese if no varía el resultado en lo absoluto. Pero igual gracias por la observación.

abimaelrc, Tengo entendido que pdo.dll no hace falta en las versiones nuevas 5.3.x pero de todos modos lo voy a probar.

Lo extraño es que el instalador no las coloque por defecto.

Última edición por GatorV; 11/01/2010 a las 14:55
  #5 (permalink)  
Antiguo 11/01/2010, 15:00
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: PDO ignora el driver mysql

Si print_r(PDO::getAvailableDrivers()); te devuelve que ya tienes mysql y sqlite instalado, ya no es problema de configuración, si no de código.

Saludos.
  #6 (permalink)  
Antiguo 11/01/2010, 15:06
 
Fecha de Ingreso: abril-2005
Ubicación: Ramos Mejía
Mensajes: 113
Antigüedad: 19 años
Puntos: 0
Respuesta: PDO ignora el driver mysql

Ya conseguí el php_pdo.dll y sigue sin funcionar.

Lo extraño aquí es, justamente, que verificando la existencia de la extensión (extension_loadaded()) y verificando que pdo tiene el driver no funciona.

Cabe destacar que el sitio web está subido a server de la web y funciona perfectamente. De hecho he bajado la versión web a mi pc y no funciona en forma local.

He hecho todo lo que sé y siempre a funcionado sin problemas. Estoy francamente perdido.
  #7 (permalink)  
Antiguo 11/01/2010, 15:20
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: PDO ignora el driver mysql

Haz un phpinfo(); te debe de imprimir toda la información de tu instalación, con eso puedes ver si PDO esta configurado y que drivers tiene disponibles.

Saludos.
  #8 (permalink)  
Antiguo 11/01/2010, 19:04
 
Fecha de Ingreso: abril-2005
Ubicación: Ramos Mejía
Mensajes: 113
Antigüedad: 19 años
Puntos: 0
Respuesta: PDO ignora el driver mysql

El phpinfo() informa de los drivers: mysql está entre ellos.

De todos modos ya lo había verificado muchas veces. Todo está presente, instalado y configurado pero aún así no funciona el driver mysql.
  #9 (permalink)  
Antiguo 11/01/2010, 21:15
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: PDO ignora el driver mysql

Si PHP te informa que ya esta como te comento el problema es a nivel código, prueba algo simple como:
Código PHP:
Ver original
  1. <?php
  2. $dsn = 'mysql:dbname=testdb;host=localhost';
  3. $user = 'dbuser';
  4. $password = 'dbpass';
  5.  
  6. try {
  7.     $dbh = new PDO($dsn, $user, $password);
  8.     $query = "SELECT * FROM test";
  9.     $stmt = $dbh->prepare($query);
  10.     while( $row = $stmt->fetch() ) {
  11.           var_dump($row);
  12.     }
  13.     $stmt = null;
  14.     $dbh = null;
  15. } catch (PDOException $e) {
  16.     echo $e->getMessage();
  17. }

Saludos.
  #10 (permalink)  
Antiguo 12/01/2010, 16:00
 
Fecha de Ingreso: abril-2005
Ubicación: Ramos Mejía
Mensajes: 113
Antigüedad: 19 años
Puntos: 0
Respuesta: PDO ignora el driver mysql

Hola GatorV, antes que nada muchas gracias por el código;

Lo ejecuto y el resultado es el siguiente:

could not find driver.

en mi phpinfo() figura que php_pdo_mysql está presente junto con el odbc y el sqlite.

PDO

PDO support enabled
PDO drivers mysql, odbc, sqlite

pdo_mysql

PDO Driver for MySQL enabled
Client API version mysqlnd 5.0.5-dev - 081106 - $Revision: 289630 $
Persistent cache enabled
put_hits 0
put_misses 0
get_hits 0
get_misses 0
size 2000
free_items 2000
references 2

Directive Local Value Master Value
pdo_mysql.cache_size 2000 2000

PDO_ODBC

PDO Driver for ODBC (Win32) enabled
ODBC Connection Pooling Enabled, strict matching

pdo_sqlite

PDO Driver for SQLite 3.x enabled
SQLite Library 3.6.19
  #11 (permalink)  
Antiguo 12/01/2010, 16:51
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: PDO ignora el driver mysql

Es muy raro en ese caso es probable que tengas un problema directo con tu instalación de PHP, te recomendaría que reinstales tu versión de PHP o uses una actual.

Saludos.
  #12 (permalink)  
Antiguo 12/01/2010, 17:54
 
Fecha de Ingreso: abril-2005
Ubicación: Ramos Mejía
Mensajes: 113
Antigüedad: 19 años
Puntos: 0
Respuesta: PDO ignora el driver mysql

Mi versión de php es la 5.3.1, la última. Mi apache también es el último; 2.2.14.

El mysql no, es la versión 5.1 no la 5.5.

De todos modos he probado con varias versiones de php y apache varias veces, incluso e reinstalado el windows 7 por completo.
  #13 (permalink)  
Antiguo 12/01/2010, 19:05
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: PDO ignora el driver mysql

Es muy raro igual podrías reportar el bug directamente ya que si el phpinfo sí te muestra el driver de PDO pero al ejecutar código te dice que no existe es un problema bastante grave y sería mejor que lo reportaras.

Saludos.
  #14 (permalink)  
Antiguo 12/01/2010, 23:37
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 11 meses
Puntos: 1517
Respuesta: PDO ignora el driver mysql

No sé si esto te ayude a resolver el problema, pero verifica si instalando todo con wamp te funciona.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #15 (permalink)  
Antiguo 13/01/2010, 16:54
 
Fecha de Ingreso: abril-2005
Ubicación: Ramos Mejía
Mensajes: 113
Antigüedad: 19 años
Puntos: 0
De acuerdo Respuesta: PDO ignora el driver mysql

Hola a todos, he resuelto el problema:

Paso a explicar cuál fue la cuestión.

mi phpDesigner 7 tiene su propio php.ini y no me digan que es obvio porque me cansé de verificar ese mismo php.ini. El truco es que en windows7 (y vista) se crea una segunda carpeta para cada programa.

Usuarios/jorge/appData/Local/Virtual Store/Program Files/phpDesigner...

En esta carpeta de contrabando existe otro php.ini que es el que realmente toma para la ejecución no solo el phpDesigner sino el apache también. Sin embargo el phpinfo() reporta desde el php.ini que está en c:\php que es el que yo instalé.

De modo que habilitados los drivers en ese php.ini de facto todo funciona como debe.

Espero que le ayude a todo aquél que tenga un editor que instale una segunda copia del php.

Un abrazo y muchas gracias a todos.

Etiquetas: driver, mysql, pdo
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 10:03.