Foros del Web » Programando para Internet » PHP »

Pdo, load data infile

Estas en el tema de Pdo, load data infile en el foro de PHP en Foros del Web. Hola amigos, tengo una apicacion con php y mysql que puede subir archivos csv a la base de datos, todo esto trabaja perfecto con las ...
  #1 (permalink)  
Antiguo 18/06/2012, 12:27
 
Fecha de Ingreso: junio-2011
Mensajes: 80
Antigüedad: 11 años
Puntos: 8
Pdo, load data infile

Hola amigos,

tengo una apicacion con php y mysql que puede subir archivos csv a la base de datos, todo esto trabaja perfecto con las instrucciones mysql.

estaba comenzando a trabajar con PDO, pero no logro que me suba el fichero CSV a la base de datos con PDO.

este es el codigo que tengo.

Código PHP:
class Basedatos extends PDO
{
    public function 
__construct() {
        
parent::__construct(
                
'mysql:host=localhost'
                ';dbname=test'
root123,  
                array(
                    
PDO::MYSQL_ATTR_LOCAL_INFILE => 1,
                    
PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8',
                ));
    }
}

class 
SubirFile
{
    public 
$bd;
    
    public function 
__construct() {
        
$this->bd = new Database();
        
$this->bd->query("LOAD DATA LOCAL INFILE  'file.csv' 
                           INTO TABLE tabla_csv FIELDS TERMINATED BY ',' LINES TERMINATED BY '\r\n'                     "
); 
   }  
}

$upload = new SubirFile(); 
No me da ningun error y cuando reviso la base de datos no ha subido ningun dato del file.

Alguna ayuda con este codigo ????

Gracias de antemano !!!!
  #2 (permalink)  
Antiguo 18/06/2012, 13:27
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 14 años, 2 meses
Puntos: 2534
Respuesta: Pdo, load data infile

Podrías depurar el resultado de la consulta de PDO usando alguna función para obtener el último error, por si acaso deberías consultar la documentación.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 18/06/2012, 13:34
 
Fecha de Ingreso: junio-2011
Mensajes: 80
Antigüedad: 11 años
Puntos: 8
Respuesta: Pdo, load data infile

Hola, gracias por la respuesta pateketrueke, pero he tradado con agarrar la exeption y no me lanza nada, alguna otra idea de ke hacer o como depurarla ??

Gracias
  #4 (permalink)  
Antiguo 18/06/2012, 14:57
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 14 años, 2 meses
Puntos: 2534
Respuesta: Pdo, load data infile

Creo que la primer pregunta que te deberías hacer es si PDO soporta lo que intentas hacer.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #5 (permalink)  
Antiguo 18/06/2012, 18:11
 
Fecha de Ingreso: junio-2011
Mensajes: 80
Antigüedad: 11 años
Puntos: 8
Respuesta: Pdo, load data infile

Si, asi mismo hice pateketrueke, lo primero fue chekear que lo soportara y en la pagina de la documentacion de PHP estaba esto:

PDO::MYSQL_ATTR_LOCAL_INFILE (integer)
Enable LOAD LOCAL INFILE.

Note, this constant can only be used in the driver_options array when constructing a new database handle.

Y es lo ke he tratado, pero sin resultados positivos, es por eso ke trate de averiguar por aki por el forum, si alguien habia tenido alguna experiencia haciedo esto para que me diera una luz de ke podria chekear o hacer.

Gracias si tienen alguna otra ayuda sera de mil kilates para mi.....
  #6 (permalink)  
Antiguo 18/06/2012, 19:38
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 14 años, 5 meses
Puntos: 845
Respuesta: Pdo, load data infile

Que tal goransh_pc,

Deberias tener en cuenta que PDO por defecto tiene el ATTR_ERRMODE en ERRMODE_SILENT , si despues de ejecutar la query haces algo así, no ves el error ?

Código PHP:
Ver original
  1. print_r($this->bd->errorInfo());

y para manejar excepciones deberias cambiar el ATTR_ERRMODE a ERRMODE_EXCEPTION, algo así:

Código PHP:
Ver original
  1. class Basedatos extends PDO
  2. {
  3.     public function __construct() {
  4.         parent::__construct(
  5.                 'mysql:host=localhost'
  6.                 ';dbname=test', root, 123,  
  7.                 array(
  8.                     PDO::MYSQL_ATTR_LOCAL_INFILE => 1,
  9.                     PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
  10.                     PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8',
  11.                 ));
  12.     }
  13. }

Un comentario aparte con respecto a la clase, extender PDO y "capar" el constructor no es una buena idea, debería aceptar los parámetros de la clase padre.

Saludos.
__________________
http://es.phptherightway.com/
thats us riders :)

Última edición por masterpuppet; 18/06/2012 a las 19:47 Razón: comentario clase
  #7 (permalink)  
Antiguo 19/06/2012, 05:43
Avatar de carlos_belisario
Colaborador
 
Fecha de Ingreso: abril-2010
Ubicación: Venezuela Maracay Aragua
Mensajes: 3.156
Antigüedad: 12 años, 2 meses
Puntos: 461
Respuesta: Pdo, load data infile

además de lo que ya te han indicado hasta donde tengo entendido y corrijan si me equivoco el método query es para realizar consultas "SELECT" ya que te devuelve objeto de resultados, creo que en tu caso debería de ser exec o incluso yo no se porque pero yo cuando trabajo con PDO prefiero usar http://www.php.net/manual/es/pdo.prepare.php, saludos
__________________
aprende d tus errores e incrementa tu conocimientos
it's not a bug, it's an undocumented feature By @David
php the right way
  #8 (permalink)  
Antiguo 19/06/2012, 07:51
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 14 años, 5 meses
Puntos: 845
Respuesta: Pdo, load data infile

No es que query sea para select's sino que por el tipo de valor que retorna se ajusta mas a los select's, elegir una u otra opción depende de lo que quieres hacer con los datos que retornan, query devuelve un PDOStatement mientras que exec retorna un integer(la cantidad de filas afectadas).

En cuanto a prepare, no siempre es necesario, tiene ventajas si la query se va a ejecutar varias veces y/o si tienes que pasarle parámetros.

Saludos.
__________________
http://es.phptherightway.com/
thats us riders :)

Etiquetas: data, infile, load, mysql, pdo, sql, tabla
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 16:14.