User Tag List

Resultados 1 al 4 de 4

Tema: configurar soporte PDO en XAMPP 1.7.4

  1. #1

    Fecha de ingreso
    Jun 2006
    Mensajes
    4,556
    Mencionado
    41 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    1,259
    Agradecer Thanks Received 
    698
    Thanked in
    Agradecido 425 veces en [ARG:2 UNDEFINED] posts
    Entradas de blog
    6

    configurar soporte PDO en XAMPP 1.7.4

    Hola. Después de tres dias seguidos nada más que buscando y buscando y buscando y buscando y buscando y buscando sin sacar en claro nada, me remito a los cracks de este foro a ver si me podeis echar un cable.

    Tengo instalado xampp 1.7.4. Estaba haciendo un ejercicio en PHP que saqué de un libro "profesional PHP 6", de la editorial Wrox y anaya. Es tan sencillo como conectar con mi base de datos usando PDO, pero se me está convirtiendo en un jodido infierno.

    Llevo 3 dias atascado porque, sencillamente, no me funciona. En la propia pagina web me salta una PDOException que con el método "$e->getMessage()" me imprime el mensaje "Error: could not find driver".

    He mirado si puede ser que me falte alguna librería, pero por lo que he leido solo se necesita el archivo php_pdo_mysql.dll, y ese lo tengo. También lo tengo cargado en el php.ini: extension=php_pdo_mysql.dll

    En esta versión de xampp viene el PHP 5.3.5 He leido de gente que le fallaba esto por no tener el archivo php_pdo.dll (a secas, sin el "mysql") pero he leido en la documentación oficial del php que, por encima del php 5.3.0 ya no hace falta ese archivo. (Concretamente lo dice aqui: http://php.net/manual/en/pdo.installation.php) Igualmente he probado a buscar ese archivo e incluirlo en la misma carpeta donde está el php_pdo_mysql.dll y configurar el php.ini para que lo coja, pero al arrancar el apache me dice que el archivo no es compatible con mi versión de php, algo acerca de una clave API obsoleta.



    Os pongo un poco de información de mi phpinfo() por si os da alguna otra pista:

    Configure Command: cscript /nologo configure.js "--enable-snapshot-build" "--disable-isapi" "--enable-debug-pack" "--disable-isapi" "--without-mssql" "--without-pdo-mssql" "--without-pi3web" "--with-pdo-oci=D:\php-sdk\oracle\instantclient10\sdk,shared" "--with-oci8=D:\php-sdk\oracle\instantclient10\sdk,shared" "--with-oci8-11g=D:\php-sdk\oracle\instantclient11\sdk,shared" "--enable-object-out-dir=../obj/" "--enable-com-dotnet" "--with-mcrypt=static"

    PDO
    PDO support: enabled
    PDO drivers: mysql, odbc, sqlite, sqlite2

    pdo_mysql
    PDO Driver for MySQL: enabled
    Client API version: mysqlnd 5.0.7-dev - 091210 - $Revision: 304625 $

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


    No es problema de usuario y contraseña porque el mismo ejercicio lo tengo hecho conectando de la manera "normal (usando mysql_connect(), mysql_query(), etc y sin problemas).

    He probado a conectar como localhost, como 127.0.0.1, como el nombre del host... y nada.

    Si a alguien se le ocurre algo, yo ya he hecho todo lo humanamente posible, sencillamente estoy al límite de buscar y romperme la cabeza.

    Os añado el mensaje que me tira la función "$e->getTraceAsString()" de la PDOException, por si da alguna otra pista: #0 C:\xampp\htdocs\PDO_proyecto01\index.php(80): PDO->__construct(' mysql:host=Loc...') #1 {main}

    Gracias.
    < - >
    Aqui os pongo el código donde realizo la conexión:

    $strDSN = " mysql:host=Localhost;dbname=galeria;user=root;pass word=curs ";
    try {
    $objPDO = new PDO($strDSN);
    $objPDO->setAttrbute(PDO::ATTR_MODE, PDO::ERRMODE_EXCEPTION);
    }
    catch (PDOException $e) {
    echo "Error: ".$e->getMessage()." ".$e->getTraceAsString()."\n";
    }
    Última edición por akualung; 22/09/2011 a las 23:00 Razón: Edición automática anti doble-post.

  2. #2

    Fecha de ingreso
    Oct 2003
    Mensajes
    17,887
    Mencionado
    42 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    214
    Agradecer Thanks Received 
    163
    Thanked in
    Agradecido 112 veces en [ARG:2 UNDEFINED] posts
    Sin tener ni **** idea de bases de datos, y por la experiencia de haber montado guarreridas en mi maquina virtual, te diria que el problema no esta en el driver pdo, sino en que no es capaz de conectar/operar con la base de datos.

    Lo chungo es que la parte de los drivers de las bases de datos parece que esta ok.

    Esta conectando bien a la base de datos??

    Sin tener ni **** idea, esta creada la base de datos?

  3. #3

    Fecha de ingreso
    Apr 2004
    Mensajes
    1,011
    Mencionado
    39 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    118
    Agradecer Thanks Received 
    95
    Thanked in
    Agradecido 68 veces en [ARG:2 UNDEFINED] posts
    Lo has copiado tal cual ? lo digo porque en la cadena de conexión ha espacios que no deberían estar ahí.

    Has probado a usar:


    $strDSN = "mysql:host=Localhost;dbname=galeria";
    $strUser = "root";
    $strPassword = "curs";
    try {
    $objPDO = new PDO($strDSN, $strUser, $strPassword);
    $objPDO->setAttrbute(PDO::ATTR_MODE, PDO::ERRMODE_EXCEPTION);
    }
    catch (PDOException $e) {
    echo "Error: ".$e->getMessage()." ".$e->getTraceAsString()."\n";
    }
    make -f Makefile.wiz

  4. #4

    Fecha de ingreso
    Jun 2006
    Mensajes
    4,556
    Mencionado
    41 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    1,259
    Agradecer Thanks Received 
    698
    Thanked in
    Agradecido 425 veces en [ARG:2 UNDEFINED] posts
    Entradas de blog
    6
    Cita Iniciado por bitrider Ver mensaje
    Lo has copiado tal cual ? lo digo porque en la cadena de conexión ha espacios que no deberían estar ahí.

    Has probado a usar:


    $strDSN = "mysql:host=Localhost;dbname=galeria";
    $strUser = "root";
    $strPassword = "curs";
    try {
    $objPDO = new PDO($strDSN, $strUser, $strPassword);
    $objPDO->setAttrbute(PDO::ATTR_MODE, PDO::ERRMODE_EXCEPTION);
    }
    catch (PDOException $e) {
    echo "Error: ".$e->getMessage()." ".$e->getTraceAsString()."\n";
    }


    Ostras, es verdad, me olvidé de dar un dato importante. Esos espacios los puse así porque es como lo vi en uno de los ejemplos que encontré cuado estuve buscando como loco al ver que no me funcionaba. Al principio tenía la cadena del DSN sin espacios al principio y al final, y el error que me salía era diferente: Error: SQLSTATE[42000] [1044] Access denied for user ''@'localhost' to database 'galeria'.

    Lo raro es que me diga que no tengo acceso, porque el usuario root existe, y de hecho es con el mismo user y pass con el que conecto con el otro ejercicio, el que usa las funciones estandar mysql del php.


    Acabo de probar lo que me has dicho y parece que ya sí que conecta (aún no lo se seguro porque me falta rehacer en pdo la parte que itera por los resultados y me construye el contenido) pero ya no me da ningun fallo por pantalla, por lo que en teoria eso es que conecta bien.

    Parece ser que el error que me daba al princpio de todo (el de "access denied") se debía a la forma en que construía la cadena del DSN: $strDSN = 'mysql:host=localhost;dbname=galeria;user=root;pas sword=curs';

    Parece que no pilla bien el nombre de usuario o algo así y me da un error, pero poniendo el user y el pass como dos cadenas extras y pasándoselas al constructor de PDO como dos argumentos adicionales (que es como está hecho en tu código), parece que se subsana el problema.

    Por cierto, también he tenido que comentar la linea de abajo de la instanciación del objeto pdo, la del setAttribute, porque la tenia mal escrita. Me faltaba la "i" de setAttribute, pero de todas formas no me funciona esa linea, se queja de los argumentos que le doy (y eso que la he copiado tal cual de un ejemplo de una web) así que la he quitado.

    Voy a seguir haciendo el ejercicio y a ver si consigo que me funcione.

    Merci, Bitrider, creo que me has salvado el dia



    Merci también a tí por contestar, otto_xd, acabo de ver tu mensaje ahora, se me había pasado. Con otro ejemplo que hice sí que me conectaba bien (con los mismos parámetros), era el de PDO que me daba fallo, por eso me extrañaba que fuera cosa de la BD (aunque ves a saber, de fallos surrealistas ya he tenido unos cuantos).


    Creo que ya tengo el error del setAttribute. El primer argumento es PDO::ATTR_ERRMODE, no PDO::ATTR_MODE. Qué raro, juraría que hice copypaste de esa linea, o sea que o estaba ya mal de donde lo copié o ves a saber qué lío me monté yo solo.
    Última edición por akualung; 23/09/2011 a las 00:14

Etiquetas para este tema

Permisos de publicación

  • No puedes crear nuevos temas
  • No puedes responder temas
  • No puedes subir archivos adjuntos
  • No puedes editar tus mensajes
  •