Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1223 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  Tableau de commande sql a interpreter

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Tableau de commande sql a interpreter

n°1901951
scapel
Posté le 03-07-2009 à 11:49:48  profilanswer
 

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
mood
Publicité
Posté le 03-07-2009 à 11:49:48  profilanswer
 

n°1901969
pataluc
Posté le 03-07-2009 à 11:58:54  profilanswer
 

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
n°1901975
pataluc
Posté le 03-07-2009 à 12:01:48  profilanswer
 

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;


 
??

n°1902016
jonas3
Posté le 03-07-2009 à 14:01:00  profilanswer
 
n°1902023
scapel
Posté le 03-07-2009 à 14:19:06  profilanswer
 

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

n°1902025
pataluc
Posté le 03-07-2009 à 14:21:55  profilanswer
 

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);

n°1902030
scapel
Posté le 03-07-2009 à 14:25:26  profilanswer
 

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

n°1902032
scapel
Posté le 03-07-2009 à 14:28:11  profilanswer
 

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
n°1902035
pataluc
Posté le 03-07-2009 à 14:39:47  profilanswer
 

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

n°1902042
scapel
Posté le 03-07-2009 à 14:48:49  profilanswer
 

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

mood
Publicité
Posté le 03-07-2009 à 14:48:49  profilanswer
 

n°1902048
pataluc
Posté le 03-07-2009 à 15:05:06  profilanswer
 

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

n°1902060
scapel
Posté le 03-07-2009 à 15:36:29  profilanswer
 

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
 

n°1902070
pataluc
Posté le 03-07-2009 à 16:07:52  profilanswer
 

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

n°1902072
scapel
Posté le 03-07-2009 à 16:09:00  profilanswer
 

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?

n°1902090
pataluc
Posté le 03-07-2009 à 16:21:08  profilanswer
 

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

n°1902107
scapel
Posté le 03-07-2009 à 16:56:04  profilanswer
 

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!


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  Tableau de commande sql a interpreter

 

Sujets relatifs
Visual C++ fenetre de commandePHP : Comparer valeur d'un tableau
Ligne de commande pour sysprep[JavaScript] Cacher une ligne d'un tableau avec une hauteur à 0
SQL Tableau analyse croisée sur une année glissanteXML + XSL vers tableau HTML
Objet cliquable tableauFormulaire dans un tableau ?
commande Delprof sur XP protableau avec 3 colonnes dont celle du milieu toujours centrée
Plus de sujets relatifs à : Tableau de commande sql a interpreter


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR