Function insérer données texte dans mysql

Function insérer données texte dans mysql - PHP - Programmation

Marsh Posté le 12-10-2012 à 14:42:25    

Bonjour à tous,
 
j'ai un petit soucis avec mon script qui devrait normalement remplir ma base de donnée...  
D'après l'erreur qui m'est renvoyée (La table Estimations2012.12-10-2012 n'a pas ete videe de son contenu.Erreur Ligne 1 : 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 '-10-2012 VALUES ( 'South Africa 1', 'Premier League', '8', '2012-10-26', '20:00:' at line 1 INSERT INTO Estimations2012.12-10-2012 VALUES ( 'South Africa 1', 'Premier League', '8', '2012-10-26', '20:00:00', 'Maritzburg Utd', 'Kaizer Chiefs', '13',  '22', '66', '72', '46', '25', '11', '3 ' ) )  
je pense que l'erreur vient de la ligne $requete = 'INSERT INTO '.$tableName.' VALUES ( \''.$line.' \' ) ';   mais je ne vois pas où est l'erreur, ça doit être un truc tout con mais je vois pas.
Si quelqu'un a une idée je suis preneur ;) Je précise que mon fichier $date.txt est une fichier au format CSV.
Merci
 

Code :
  1. # Fonctions vider_table et insert_Into_Table
  2.     <?php
  3. function vider_table($table_a_vider){
  4.     $sql  = "TRUNCATE TABLE ".$table_a_vider;
  5.     mysql_query($sql);
  6.    
  7.     if(mysql_query($sql))
  8.       // SUCCES
  9.       echo "La table ".$table_a_vider." a ete videe !";
  10.     else
  11.       // ECHEC
  12.       echo "La table ".$table_a_vider." n'a pas ete videe de son contenu.";
  13.   }
  14.   // ON VIDE $table_a_vider
  15.   vider_table($table_a_vider);
  16.   ?>
  17.  
  18.   <?php
  19. function insertIntoTable( $fileName, $tableName, $con )
  20. {
  21.     $file = fopen( $fileName, 'r' );
  22.     $k = 0;
  23.     while ( ! feof( $file ) )
  24.     {
  25.         $k++;
  26.         $line = fgets( $file, 1024 );
  27.         if ( strlen( $line ) > 2 )
  28.         {
  29.             $line = addslashes( $line );
  30.             $line = str_replace ( ";", "', '", $line );
  31.             $requete = 'INSERT INTO '.$tableName.' VALUES ( \''.$line.' \' ) ';
  32.             if ( ! mysql_query ( $requete, $con ) )
  33.                 echo 'Erreur Ligne '.$k.' : '.mysql_error().'<br>'.$requete.'<br>';
  34.         }
  35.         else
  36.             echo 'Ligne '.$k.' ignoree.<br>';
  37.     }
  38.     echo '<p>Insertion du fichier '.$fileName.' termine.</p><hr>';
  39.     fclose( $file );
  40. }
  41. ?>
  42.   # Nettoyage et Remplissage de la table Estimations2012.$date
  43. <?php
  44. $a = "$date.txt";     
  45. $b = "Estimations2012.$date";
  46. $c = mysql_connect('localhost', 'root', 'root' );
  47. vider_table($b);
  48. insertIntoTable( $a, $b, $c);
  49.             ?>


Message édité par thales69 le 12-10-2012 à 14:49:03
Reply

Marsh Posté le 12-10-2012 à 14:42:25   

Reply

Marsh Posté le 12-10-2012 à 15:35:18    

Pb d'échappement de caractères. Voir les ' et les " s'ils sont bien tous échappés.


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 12-10-2012 à 16:17:21    

Merci pour ta réponse, j'avais déjà vérifié ça mais sans succès, je ne vois pas ce qui coince !

Reply

Marsh Posté le 12-10-2012 à 20:53:56    

Dans "INSERT INTO Estimations2012.12-10-2012", le tiret est un opérateur. Il faut faire "INSERT INTO `Estimations2012.12-10-2012`".
 
edit : Et dans le truncate aussi pendant qu'on y est. En gros quand tu utilises une table au nom exotique faut le protéger avec des backquotes `nom exotiqu-e de t*able`.


Message édité par czh le 12-10-2012 à 20:56:13
Reply

Marsh Posté le 12-10-2012 à 21:39:17    

Merci pour ta réponse.
Je comprend bien par contre dans mon cas où j'utilise une fonction comment je peux sur la ligne $requete = 'INSERT INTO '.$tableName.' VALUES ( \''.$line.' \' ) ';  protéger ma variable ?
 
il faudrait écrire $requete = 'INSERT INTO '.'$tableName'.' VALUES ( \''.$line.' \' ) ';  ça ne peux pas fonctionner ?

Reply

Marsh Posté le 12-10-2012 à 23:15:32    

Bon ben j'ai changé 12-10-2012 en 12102012 et effectivement sans les tirets ça marche nickel. Merci pour l'info czh !
Par contre si quelqu'un a une idée de la syntaxe quand il y a les tirets je suis preneur car je m'y suis cassé les chicots ;)

Reply

Marsh Posté le 13-10-2012 à 22:50:08    

$requete = 'INSERT INTO `'.$tableName.'` VALUES ( \''.$line.' \' ) ';
 
ou (plus clair)
 
$requete = "INSERT INTO `$tableName` VALUES ('". $line .' \' ) ';

Reply

Marsh Posté le 14-10-2012 à 18:51:12    

Merci à toi.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed