Insertando contenido de un txt en la bd mysql...

Hola colega mira después de dar miles de tropezones sin resolver acudo a ti para ver si me puedes ayudar, resulta que estoy haciendo un sistemita que comienza con importar datos de un txt para una bd mysql pero resulta que no me esta insertando nada en la bd, te voy a explicar por partes, primeramente te mando la función que debe hacer esa acción :
function exportFileToDatbase($filename,$tablename)//,$fieldno)//$mode,
    {
        /*//delfirstline("gen.txt", 1);
        $arrayOflines=file($filename);
        $linesIWant=array_slice($arrayOflines,1);
        $fileContents=implode("\n",$linesIWant);
        $fd=fopen("newfile.txt",'w+');
        fwrite($fd,$fileContents);
        //fclose($fd);
        $myFile = "gen.txt";
        unlink($myFile);        
        //$fd=fopen($fp,"$mode");     --> linea original    
        while(!feof($fd)) {
            $line=fgets($fd,5000);
            //$f=explode(",",$line);
            $f=preg_split("/,/",$line);
                //for($i=0;$i<$fieldno;$i++) {
                for($i=0;$i<count($f);$i++) {
                    $a[]=trim($f[$i]);
                }    
            $value=implode(",",$a);
            //$value=implode("",$a);
            unset($a);
            $sql="insert into $tablename values($value)";
            echo $sql;
            $this->query($sql);
        }*/
// comienza aqui, lo de arriba no me funciona asi que esta comentado
      echo '<br />';
          //delfirstline("gen.txt", 1);
          $arrayOflines = file($filename);
          $linesIWant = array_slice($arrayOflines, 1);
          $fileContents = implode("\n", $linesIWant);
          $fd = fopen("newfile.txt", 'w+');
          fwrite($fd, $fileContents);
          //fclose($fd);
          $myFile = "gen2.txt";
          //unlink($myFile);
          //$fd=fopen($fp,"$mode");    --> linea original   
          $fd = fopen("gen2.txt", "r");
          while(!feof($fd))
          {
            $line = fgets($fd, 5000);
            //$f=explode(",",$line);
            $f = preg_split("/,/", $line);
            //for($i=0;$i<$fieldno;$i++) {
            for($i = 0; $i < count($f); $i ++)
            {
              if(trim($f[$i])!='')
                $a[] = '\''.trim($f[$i]).'\'';
            }
            $value = implode(",",$a);
            //$value=implode("",$a);
            unset($a);
            $sql = "insert into $tablename values($value)";
            echo $sql.'<br />';
            //$this->query($sql);
    }
    }
mi fichero text es más o menos así :
Time,machine1 - average, signal, analog input [W / m²],    ,machine2 - 220kV energy [MWh],    ,machine3 -  [m³/h],    ,machine4 - level  1oo4 water process [mm],    ,
13-dic-2009 0:00:00,      ,0.00,    ,23089.47,  1624704.00, ,        1813,  ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
alli estan las dos primeras lineas, como ves lo primero no me hace falta asi que lo elimino y creo un fichero nuevo sin esa linea, o sea solo con  los datos que voy a entrar en la bd
13-dic-2009 0:00:00,      ,0.00,    ,23089.47,  1624704.00, ,        1813,  ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
las columnas vienen siendo estas :
Tiempo                        machine1 - average  signal                     
13-dic-2009 0:00:00    0.00                          23089.47
lo coges ???
bueno, asi como esta el codigo me muestra lo siguiente en el browser :
C:\wamp\tmp\php56.tmp
insert into tblgeneracion values('13-dic-2009 0:00:00','0.00','23089.47','1624704.00','1813')
insert into tblgeneracion values('13-dic-2009 0:01:00','0.00','23089.47','1624708.00','1815')
Notice: Undefined variable: a in C:\wamp\www\file\fileClass.php on line 128
Warning: implode() [function.implode]: Invalid arguments passed in C:\wamp\www\file\fileClass.php on line 128
insert into tblgeneracion values()
The file was added sucessfully!
la linea 128 es esta :
$value =...

1 Respuesta

Respuesta
1
Para empezar, la instrucción de Insert que pones:
 $sql = "insert into $tablename values($value)";
 Te va a dar errores, pon lo como una expresión entera, por ejemplo asi:
INSERT INTO Store_Information (store_name, Sales, Date)
VALUES ('Los Angeles', 900, '10-Jan-1999')
Para que sepa donde tiene que meter cada cosa.
Pruébalo y dime qué te sale al poner
echo $sql.'<br />';
Pues así podré ver cual es el query que estas enviando a la BD.
Saludos.
Tu presupuesto Web gratis, instantáneo y sin compromiso. Conócenos
Gracias por tu pronta respuesta, mira cuando pongo esto :
$sql = "INSERT INTO $tablename (Tiempo, 0CJA10GK001_202 - DNI averagetracking, communiation signal from FSC, Campo4, Campo5) VALUES ($value)";
            echo $sql.'<br />';
me dice esto :
C:\wamp\tmp\php1AD.tmp
INSERT INTO tblgeneracion (Tiempo, 0CJA10GK001_202 - DNI averagetracking, communiation signal from FSC, Campo4, Campo5) VALUES ('13-dic-2009 0:00:00','0.00','23089.47','1624704.00','1813')
INSERT INTO tblgeneracion (Tiempo, 0CJA10GK001_202 - DNI averagetracking, communiation signal from FSC, Campo4, Campo5) VALUES ('13-dic-2009 0:01:00','0.00','23089.47','1624708.00','1815')
Notice: Undefined variable: a in C:\wamp\www\file\fileClass.php on line 128
Warning: implode() [function.implode]: Invalid arguments passed in C:\wamp\www\file\fileClass.php on line 128
INSERT INTO tblgeneracion (Tiempo, 0CJA10GK001_202 - DNI averagetracking, communiation signal from FSC, Campo4, Campo5) VALUES ()
The file was added sucessfully!
ahora cuando pongo
$this->query($sql);
me sale :
C:\wamp\tmp\php1AF.tmp
Query FailedYou have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '- DNI averagetracking, communiation signal from FSC, Campo4, Campo5) VALUES ('13' at line 1Query FailedYou have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '- DNI averagetracking, communiation signal from FSC, Campo4, Campo5) VALUES ('13' at line 1
Notice: Undefined variable: a in C:\wamp\www\file\fileClass.php on line 128
Warning: implode() [function.implode]: Invalid arguments passed in C:\wamp\www\file\fileClass.php on line 128
Query FailedYou have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '- DNI averagetracking, communiation signal from FSC, Campo4, Campo5) VALUES ()' at line 1The file was added sucessfully!
No creo que haga falta pasarle los valores porque estos van en $value ahora si crees que es mejor así me lo dices para cambiarlo. Saludos,
Dieter.
Coge el Query e intenta meterlo a través del SQL de phpmysql, ahí te dirá más concretamente el error. Creo que tienes un poco de lio en ese query, la verdad, consultalo y me comentas!
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '- DNI averagetracking, Campo3, Campo5, Campo6, Campo8) VALUES ('13-dic-2009 0:0' at line 1
Esto es lo que me devuelve el phpmyadmin, la verdad que no tengo ni la más puta idea de que puede ser y mira que llevo rato haciendo esto y nada, espero puedas ayudarme, Muchas gracias, Saludos,
Dieter.
El problema es que si no tienes mucha idea de SQL, es casualidad que o averigües... me da la impresión de que es un problema con la fecha, la verdad... no se qué tipo son los campos, así que no puedo averiguar mucho más.
Para v er un query bien hecho, inserta un registro a través del phpmysql y captura el INSERT que hace él, de esta forma verás com se hace un Insert bueno con los datos que tu le das.
A ver si ahora...
Bueno mira el insert desde phpmyadmin me devuelve esto INSERT INTO `movedb`.`tblgeneracion` (`Tiempo`, `YJ_0CJA10GK001_202 - DNI averagetracking`, `communiation signal from FSC`, `Campo4`,... todos los campos)
Pero en mi caso en $tablename ya va la tabla donde deben ir los datos y en $values los valores consecutivos, dejame acalarate que en algunos casos hay campos intermedios vacíos en el txt, coincido contigo en el problema de la fecha pero es que ese dato viene de un equipo en tiempo real y lo devuelve en ese formato lo manda access y luego a un txt y como veras es un poco difícil trabajar eso como cadenas para luego convertirlo a otro formato válido, en la bd esto es un datetime, mira como veo que esto de leer de un txt esta un poco complicado, hay otra forma, esos datos los tengo también en un fichero mdb. De access tal vez conozcas alguna manera que desde php se pueda cargar ese fichero e insertarlo tal y como va en mysql, como una migración, se que hay aplicaciones por ahí que lo hacen pero la idea es implementarlo yo, quizás conozca algún link o post que hable de esto, estuve buscando pero no encuentro nada, dime tu cual es la forma más fácil, por otra parte no tengo inconvenientes en enviarte mi sistema con mi bd y que le eches un vistazo, se que a lo mejor estas enredao con el trabajo pero bueno lo digo por si tienes tiempo, necesito resolver esto que si no pierdo un cliente importante jejejeje algo que es bastante importante acá, si me puedes ayudar te lo agradezco hermano, Saludos desde Cuba,
Dieter.
Ok, si lo que quieres es conectarlos, bajate el ODBC para MySQL y desde Access crea una conexión, así podrás realizar la importación muy sencillo.
Gracias colega, bueno creo que tendré que hacerlo así y desistir del txt je je, bueno si eso después te comento como va la cosa o pra otra duda cuento contigo. Saludos,
Dieter.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas