Tableau de commande sql a interpreter

Tableau de commande sql a interpreter - PHP - Programmation

Marsh Posté le 03-07-2009 à 11:49:48    

Je deviens fou...
J'ai un fichier de commandes sql séparées par des point-virgules, que je veux faire interpreter par un prog PHP.
Pour cela:
- je lis le fichier avec fread > c ok
- je "explode" dans un tableau
- avec un foreach je parcours le tableau
- Et je lance ma requet ...
Les echo dans le code me retourne bien la commande, mais celle ci n'est pas interpretee par mysqli_query
Et si je retire les // pour imposer directement la commande (qui s'affiche via les echo) , ça fonctionne !
 
Je suis preneur de toutes vos idées!
 
Merci d'avances!
 
Voici le code:

Code :
  1. <?php
  2. define('DB_HOST',       'localhost');
  3. define('DB_USER',       'root');
  4. define('DB_PASSWORD',   '');
  5. define('DB_NAME',   'test2');
  6. //mysql_select_db(DB_NAME) or die(mysql_error());
  7. function sqlQuery($query)
  8. {
  9. // Connexion à la base de données
  10. $cxn = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD,DB_NAME) or die(mysqli_error($cxn));
  11. echo $query.'<br \>'.'<br \>';
  12.     $tab_query[] = explode(';',$query);
  13.     foreach($tab_query as $value)
  14.     {
  15.      if ($value!='')
  16.      {
  17.       echo $value[0].'<br \>'.'<br \>';
  18.   //$cmd  = "CREATE TABLE inlinemod (ID CHAR(255) NOT NULL) ;";
  19.                 $cmd = $value;
  20.       mysqli_query($cxn,$cmd) or die(mysqli_error($cxn));
  21.      }
  22.     }
  23. }
  24. function transfert_table($fichier)
  25. {
  26. if (file_exists($fichier))
  27. {
  28.  $fp = fopen("$fichier", "r" );
  29.  $alire = fread($fp,1000000);
  30. }
  31. else
  32. {
  33.  /* le fichier n'existe pas */
  34.  echo "Fichier introuvable !<br>Importation stoppée.";
  35.  exit();
  36. }
  37. sqlQuery($alire);
  38. echo "<br>Importation terminée, avec succès.";
  39. /* Fermeture */
  40. fclose($fp);
  41. }
  42. transfert_table('D:/Program Files/EasyPHP 2.0b1/www/test/stage/inlinemod_seb.sql');
  43. mysql_close();
  44. ?>


Message édité par scapel le 03-07-2009 à 13:58:49
Reply

Marsh Posté le 03-07-2009 à 11:49:48   

Reply

Marsh Posté le 03-07-2009 à 11:58:54    

utilise les balises [code] stp. bouton http://forum-images.hardware.fr/icones/message/c.gif

 

tu peux éditer ton post avec http://forum-images.hardware.fr/themes_static/images_forum/1/edit.gif


Message édité par pataluc le 03-07-2009 à 11:59:21
Reply

Marsh Posté le 03-07-2009 à 12:01:48    

euh, sinon il manque peut être un

Code :
  1. $cmd = $value;

non?
 
et d'ailleurs pourquoi tu fais

Code :
  1. echo $value[0];

au lieu de

Code :
  1. echo $value;


 
??

Reply

Marsh Posté le 03-07-2009 à 14:01:00    

Reply

Marsh Posté le 03-07-2009 à 14:19:06    

Merci Pataluc, de t'interresser a mon bout de code... Oui en effet, il manquait l'affectation (boulette dans mon copier coller) mais ça ne fonctionne pas pour autant..Voici ce qu j'obtiens:
 
CREATE TABLE 'inlinemod' (ID CHAR(255) NOT NULL) ;
 
CREATE TABLE 'inlinemod' (ID CHAR(255) NOT NULL)
 
Erreur de syntaxe pr�s de 'CREATE TABLE 'inlinemod' (ID CHAR(255) NOT NULL)' � la ligne 1
 
J'utilise [] pour la variable l'element obtenu avec le foreach semble etre un tableau, si j'utilise $value sans crochet, j'obtiens le msg suivant:
 
Warning: mysqli_query() expects parameter 2 to be string, array given in D:\Program Files\EasyPHP 2.0b1\www\test\stage\premiereconnexion_3.php on line 24

Reply

Marsh Posté le 03-07-2009 à 14:21:55    

scapel a écrit :

J'utilise [] pour la variable l'element obtenu avec le foreach semble etre un tableau, si j'utilise $value sans crochet, j'obtiens le msg suivant:
 
Warning: mysqli_query() expects parameter 2 to be string, array given in D:\Program Files\EasyPHP 2.0b1\www\test\stage\premiereconnexion_3.php on line 24


ah ouais, ok, c'est parce qu'il ne faut pas de [] avant le explode... http://www.php.net/manual/fr/funct [...] e.examples
 

Code :
  1. $tab_query = explode(';',$query);

Reply

Marsh Posté le 03-07-2009 à 14:25:26    

eval permet d'evaluer du code PHP, mais là il sagit d'une requete sql. Eval, ne peut pas m'aider je crois

Reply

Marsh Posté le 03-07-2009 à 14:28:11    

Pataluc,
Oui, c'est ce que j'ai fait au debut... Bon je reviens au debut, voici le code:

Code :
  1. <?php
  2. define('DB_HOST',       'localhost');
  3. define('DB_USER',       'root');
  4. define('DB_PASSWORD',   '');
  5. define('DB_NAME',   'test2');
  6. //mysql_select_db(DB_NAME) or die(mysql_error());
  7. function sqlQuery($query)
  8. {
  9. // Connexion à la base de données
  10. $cxn = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD,DB_NAME) or die(mysqli_error($cxn));
  11. echo $query.'<br \>'.'<br \>';
  12.     $tab_query = explode(';',$query);
  13.     foreach($tab_query as $value)
  14.     {
  15.      if ($value!='')
  16.      {
  17.       echo $value.'<br \>'.'<br \>';
  18.   //$cmd  = "CREATE TABLE inlinemod (ID CHAR(255) NOT NULL) ;";
  19.   $cmd = $value;
  20.       mysqli_query($cxn,$cmd) or die(mysqli_error($cxn));
  21.      }
  22.     }
  23. }
  24. function transfert_table($fichier)
  25. {
  26. if (file_exists($fichier))
  27. {
  28.  $fp = fopen("$fichier", "r" );
  29.  $alire = fread($fp,1000000);
  30. }
  31. else
  32. {
  33.  /* le fichier n'existe pas */
  34.  echo "Fichier introuvable !<br>Importation stoppée.";
  35.  exit();
  36. }
  37. sqlQuery($alire);
  38. echo "<br>Importation terminée, avec succès.";
  39. /* Fermeture */
  40. fclose($fp);
  41. }
  42. transfert_table('D:/Program Files/EasyPHP 2.0b1/www/test/stage/inlinemod_seb.sql');
  43. mysql_close();
  44. ?>


 
Mais le resultat est le meme:
CREATE TABLE 'inlinemod' (ID CHAR(255) NOT NULL) ;
 
CREATE TABLE 'inlinemod' (ID CHAR(255) NOT NULL)
 
Erreur de syntaxe pr�s de 'CREATE TABLE 'inlinemod' (ID CHAR(255) NOT NULL)' � la ligne 1
 


Message édité par scapel le 03-07-2009 à 14:28:50
Reply

Marsh Posté le 03-07-2009 à 14:39:47    

juste par curiosité, pourquoi tu n'importes pas ton fichier directement depuis phpmyadmin?
 
sinon, c'est peut être les quotes autour du nom de la table qui foutent la merde...

Reply

Marsh Posté le 03-07-2009 à 14:48:49    

Le but c'est de faire une appli qui pourra charger des tables aux démarrages sans a avoir passer par l'interface admin.
Les cotes ne genent pas, car mon programme se deroule jusqu'au "echo" qui m'affiche bien l'instruction qui se trouve dans mon fichier inlinemod_seb.sql, c'est son interpretation qui plante...

Reply

Marsh Posté le 03-07-2009 à 14:48:49   

Reply

Marsh Posté le 03-07-2009 à 15:05:06    

je parlais bien de l'interprétation des quotes par la bdd et pas par php.

Reply

Marsh Posté le 03-07-2009 à 15:36:29    

OK, s'cuse... Mais non, ça n'a pas l'air d'etre ça le pb...
Par contre, lorsque je regarde le code HTML genere par mon php, l'echo de la valeur traité par l'instruction "explode" :
<br \>?CREATE TABLE inlinemod (ID CHAR(255) NOT NULL) <br \>
Un point d'interrogation s'invite dans ma commande ! Je pense que c'est a cause de lui qu'elle n'est pas interpretee...
J'ai essaye de le virer mais sans succes... Pouquoi explode me rajoute ce "?" .... Grrrrrrrrr
 

Reply

Marsh Posté le 03-07-2009 à 16:07:52    

tu pourrais montrer le contenu de  ton fichier de commande sql?

Reply

Marsh Posté le 03-07-2009 à 16:09:00    

Pour faire avancer le smilblil, c'est pas 1 caractere, mais 3 qui sont parasites a ma commande, et si je les retire, ça roule... Pourquoi explode (ou split d'ailleur) me pollue ma chaine?

Reply

Marsh Posté le 03-07-2009 à 16:21:08    

si tu nous montre pas la gueule du fichier avant le explode on peut pas te répondre...  
 
est ce que ca viendrait pas de ton read? tu peux pas utiliser la fonction file()? http://fr3.php.net/manual/fr/function.file.php

Reply

Marsh Posté le 03-07-2009 à 16:56:04    

Sur le coup, quand tu m'as demande le fichier, je me suis dit que te faire un copier coller du contenu texte serait plutôt futile... Mais par contre, j'ai basculé (via mon editeur UE ) en mode binaire et là, surprise... Des codes cachés... Apres avoir nettoyé manuellement le fichier, ça fonctionne! Reste plus qu'a savoir comment et pourquoi ces codes étaient là et je vais probablement robustifier la lecture des commandes. Mais mon problème est résolu! Merci pour ton aide!

Reply

Sujets relatifs:

Leave a Replay

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