Drole de pb avec un mysql_query

Drole de pb avec un mysql_query - SQL/NoSQL - Programmation

Marsh Posté le 04-10-2006 à 11:07:51    

Bonjour à tous,
 
Dans un de mes projets, j'ai tout un systéme qui contruit des tables dynamiquement, et qui me les remplis.
J'en arrive a avoir des requetes assez consequente, du genre :  
 

Code :
  1. INSERT INTO t_test2
  2. (`Nom et adresse officiels`,`Référence de la`,`Référence d'`,`Objet du marché :`,`Type de marché de tr`,
  3. `Critères d'attri`,`Type de procédure :`,`Valeur totale estimé`,`Attribution des march`,`Offres la plus basse/`,
  4. `Sous-traitance :`,`Part de la sous-traitance`,`Date d'attribution du`,`Nombre total d'offres`,
  5. `Autres informations :`,`Date d'envoi du pr`)
  6. VALUES
  7. (' ville de Toulouse. Personne responsable du marché : Mme Marie-Ange xxxxxxxxxx',' B.O.A.M.P. :
  8. xxxxxxxxxxxxx. ',
  9. ' 05d219. ',' ',' exécution. ',
  10. ' Offre économiquement la plus avantageuse appréciée en fonction des critères énoncés ci-dessous :
  11. - notice technique ; - prix ; - engagement sur les délais prescrits à l'acte d'engagement. ',
  12. ' appel d'offres ouvert. ',' 3959607,71 EUR (H.T. hors options) ; montant total des options : 306 870,00 EUR (H.T.). ',
  13. ' Lot(s) 1. - hall d'accueil, Café du Muséum, droguier, médiathèque : cgem,,
  14. à l'attention de Mme xxxxxxxxxxxxxxxx',
  15. ' 41 744 EUR/74 756 EUR. ',' non. ',' 145 150 EUR Lot(s) 8. - soclage : infructueux. Lot(s) 9. - electricité : snef,
  16. , à l'attention de M. xxxxxxxxxxxxxxxxxxxxxxxxxxx',
  17. ' 16 août 2006. ',' 19. ',' 2 offres pour le lot 1. 1 offre pour le lot 2. 2 offres pour le lot 3 1 offre pour le lot 4. 1
  18. offre pour le lot 5 2 offres pour le lotr 6. 1 offre pour le lot 7. Aucune offre pour le lot 8. 2 offres pour le lot 9.
  19. 3 offres pour le lot 10. 2 offres pour le lot 11. 2 offres pour le lot 12. ',' 5 septembre 2006.   ')


 
 
Cette requete fonctionne parfaitement lorsque je la copie colle dans phpmyadmin.
 
Elle fonctionne également lorsque je fait un mysql_query("toute la requete" );
 
Mais lorsque je stock cette requete dans une variable, puis que "j'execute" cette variable, cela ne fonctionne pas !!!
 
Voici mon code :
 
   

Code :
  1. $values="";
  2.     $sql="INSERT INTO t_test2(";
  3.     foreach ($final as $key=>$value)
  4.     {
  5.      if($r==0)
  6.      {
  7.       $sql.= "`".$key."`";
  8.       $values.="'".$value."'";
  9.       $r++;
  10.      }
  11.      else
  12.      {
  13.       $sql.=",`".$key."`";
  14.       $values.=",'".htmlentities($value)."'";
  15.      }
  16.     }
  17.  
  18.  
  19.     $sql=$sql.') VALUES('.$values.')';
  20.  
  21.     echo $sql."<br />";
  22.    
  23.     /*
  24.     LA REQUETE FONCTIONNE DS PHPMYADMIN, MAIS PAS AVEC mysql_query()....
  25.     MYSTERE MYSTERE !
  26.     */
  27.    
  28.    
  29.     mysql_query($sql) or die(mysql_error());


 
qui me sort l'erreur suivante :
Champ 'Référence de la' inconnu dans field list
 
alors que ce champ existe bien, et que, rapellon le, la requete contenu dans $sql fonctionne parfaitement sous phpmyadmin.....
 
 
Merci d'avance pour votre aide :)


Message édité par Harkonnen le 07-10-2006 à 11:14:44
Reply

Marsh Posté le 04-10-2006 à 11:07:51   

Reply

Marsh Posté le 04-10-2006 à 11:36:09    

c'est moche les espaces dans les noms de champs :/

Reply

Marsh Posté le 04-10-2006 à 11:38:42    

Je sais, mais c généré dynamiquement...
 
La requête est moche, mais j'y peut pas grand chose :/
 
Ce qui m'embete, c'est cette histoire de variable $sql qui veut pas marcher avec mysql_query.

Reply

Marsh Posté le 04-10-2006 à 12:07:26    

je vote problème de caractères genre ` ou '  
Si cela s'affiche correctement en html, c'est pas pour autant que la chaine est effectivement correcte.
tu devrais faire un coup de mysql_real_escape_string pour t'assurer que ta requete est correcte.
 
Par ailleurs je plussoie allègrement flo850 sur le coté immonde de la structure de ta table

Reply

Marsh Posté le 04-10-2006 à 12:14:42    

Ma requte fonctionne trés bien, puisque copié ds phpmyadmin, elle fonctionne.
 
 
de meme si je la colle directement ds mysql_query, ca fonctionne.
 
C'est quand je passe via une varibale, genre $sql="marequete" que ca ne fonctionne plus :(
 
J'ai deja tester mille fois avec des  
mysql_real_escape_string
mysql_escape_string
addslahes
htmlentities, eect...

Reply

Marsh Posté le 04-10-2006 à 15:46:46    

Personne n'a une idée ???

Reply

Marsh Posté le 05-10-2006 à 23:21:35    

Si, moi :) Tu utiliserais des vrais noms de champs corrects et propres t'aurais pas de souci de ce genre ;)

Reply

Marsh Posté le 05-10-2006 à 23:41:51    

comme je l'ai deja dit, c dynmique, et ca change tt le temps, je peux pas changer les nom des champs :(

Reply

Marsh Posté le 05-10-2006 à 23:53:45    

energiez a écrit :

comme je l'ai deja dit, c dynmique, et ca change tt le temps, je peux pas changer les nom des champs :(


SI tu peux ;) Tu peux très bien remplacer les espaces par des _ et suprimer les accents [:itm]

Reply

Marsh Posté le 06-10-2006 à 09:55:49    

en effet, ca c possible :p

Reply

Marsh Posté le 06-10-2006 à 09:55:49   

Reply

Marsh Posté le 06-10-2006 à 11:54:59    

energiez a écrit :

en effet, ca c possible :p


Tu vois, tout problème trouve solution propre :whistle:

Reply

Marsh Posté le 06-10-2006 à 12:20:40    

Mais bon, j'ai fait autrement.
 
J'ai tout stocké dans un fichier sql.
Ensuite je l'execute :p

Reply

Marsh Posté le 06-10-2006 à 12:22:50    

tu gère le cas de deux execution simultanées ?

Reply

Marsh Posté le 06-10-2006 à 13:12:29    

2 executions simultanées de quoi?

Reply

Marsh Posté le 06-10-2006 à 15:19:32    

deux personnes différentes qui vont ajouter un marché  
 
deux personnes différentes qui vont lancer ton script  

Reply

Marsh Posté le 06-10-2006 à 15:53:54    

Y'a rien de tout ca ds ce projet ;)
 
C'est une sorte de backup qui est lancé une fois de temps a autre :)

Reply

Marsh Posté le 07-10-2006 à 01:14:37    

A l'origine ton souci était simplement un problème de caractères non échappés ;)
Mais je maintiens que t'arriveras à rien de bon avec des attributs comme ça...
 
La preuve t'as eu un souci tout bête avec php, si t'as besoin un jour d'utiliser tes données pries le ciel que tout se vautre pas lamentablement :d

Reply

Marsh Posté le 07-10-2006 à 11:00:37    

elle does Marie-Ange ?

Message cité 1 fois
Message édité par Taz le 07-10-2006 à 11:00:50
Reply

Marsh Posté le 07-10-2006 à 11:11:21    

leflos5 a écrit :

A l'origine ton souci était simplement un problème de caractères non échappés ;)
Mais je maintiens que t'arriveras à rien de bon avec des attributs comme ça...
 
La preuve t'as eu un souci tout bête avec php, si t'as besoin un jour d'utiliser tes données pries le ciel que tout se vautre pas lamentablement :d


 
non, ce n'est pas un pb de carctéres échappé, car lorsque je copie ma requete direct ds php(ds le mysql_query), ca fonctionne trés bien. C qd je passe via une vriable que ca maerde...
 

Taz a écrit :

elle does Marie-Ange ?


 
T qui toi?
 
EDIT : ok, j'ai compris :p
Je venais de parler avec une Mari-Ange, c pr ca que je comprenais pas :p :lol:

Message cité 1 fois
Message édité par energiez le 07-10-2006 à 11:19:28
Reply

Marsh Posté le 07-10-2006 à 11:12:01    

energiez>> tant que t'y est, tu devrais mettre le tour de poitrine et la date de naissance de marie ange aussi :pfff:
j'ai édité ton post de départ pour virer ses coordonnées et n° de tél :sarcastic:

Reply

Marsh Posté le 07-10-2006 à 11:17:29    

A ok, j'avasi pas compris ^^
 
Mais de tte maniére, y'a pas de pb, c des données publiques, accesibles à tous !

Reply

Marsh Posté le 07-10-2006 à 17:37:35    

energiez a écrit :

non, ce n'est pas un pb de carctéres échappé, car lorsque je copie ma requete direct ds php(ds le mysql_query), ca fonctionne trés bien. C qd je passe via une vriable que ca maerde...


 
Parce que t'as des caractères qui font merdouiller le truc qui trainent. Même surement au niveau des /n /r non affichés...
 
Enfin ça veut bien dire que y'a un souci quelque part, mysql_query est moins regardant que le parseur...

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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