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

  FORUM HardWare.fr
  Programmation
  PHP

  Problème d'apostrophe PHP et SQL SERVER

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Problème d'apostrophe PHP et SQL SERVER

n°1800893
sananas
Posté le 16-10-2008 à 10:56:03  profilanswer
 

Bonjour,
 
J'ai un soucis avec une de mes requêtes SQL SERVER sous php, j'ai des messages d'erreur qui apparaissent dans mon log php_error, mais la requête affiche quand même le résultat... j'aimerais comprendre le problème lié à ces messages...
 
J'ai une fonction qui va lister tout les numéros de rue d'un même immeuble en fonction de son numéro de groupe, de bâtiment et du nom de la rue, pour m'afficher correctement l'adresse de ce même immeuble :
 

Code :
  1. function RueAdr($groupe,$batiment,$rue){
  2. $serv=Connect("MSSQL" );
  3. //Création de la requête
  4. $sql_nr= "SELECT distinct ADR_NO,ADR_RUE  FROM IMMEUBLE WHERE GR=".$groupe." AND BAT=".$batiment." and ADR_RUE='".addslashes($rue)."'  and DATE_G = '1900-01-01 00:00:00' and DATE_R = '1900-01-01 00:00:00' order by  ADR_RUE,ADR_NO  ";
  5. //exécution de la requête
  6. $res_nr=mssql_query($sql_nr);  //ligne 12
  7. //affichage
  8. $n="";
  9. $gold="";
  10. $bold="";
  11. while ($row=mssql_fetch_array($res_nr)){
  12. if (($n!="" )&&($groupe==$gold)&&($batiment==$bold)) $n.=", ";
  13. $n.=trim($row['ADRPA_NO']);    //ligne 22
  14. $gold=$groupe;
  15. $bold=$batiment;
  16. }
  17. return $n;
  18. mssql_close($serv);
  19. }


 
Le résultat de fonction me donne l'adresse suivante : 12,14,16,18 rue de l'abbe Pierre
 
 
Les erreur logs sont les suivantes :
 
[16-Oct-2008 10:31:54] PHP Warning:  mssql_query() [<a href='function.mssql-query'>function.mssql-query</a>]: message: Line 1: Incorrect syntax near 'ABBE'. (severity 15) in /xxxxxxx/fct_RueAdr.inc.php on line 12
[16-Oct-2008 10:31:54] PHP Warning:  mssql_query() [<a href='function.mssql-query'>function.mssql-query</a>]: message: Unclosed quotation mark before the character string ' order by  ADR_RUE,ADR_NO  '. (severity 15) in /xxxxxxx/fct_RueAdr.inc.php on line 12
[16-Oct-2008 10:31:54] PHP Warning:  mssql_query() [<a href='function.mssql-query'>function.mssql-query</a>]: Query failed in /xxxxxxx/fct_RueAdr.inc.php on line 12
[16-Oct-2008 10:31:54] PHP Warning:  mssql_fetch_array(): supplied argument is not a valid MS SQL-result resource in /xxxxxxx/fct_RueAdr.inc.php on line 22

 
Qu'est ce qui ne va pas dans ma requête SQL j'ai l'impression que le addslashes ne fait pas vraiment son travail?


---------------
Recherche carillon métallique avec dégradé de couleur...
mood
Publicité
Posté le 16-10-2008 à 10:56:03  profilanswer
 

n°1800984
olivthill
Posté le 16-10-2008 à 13:36:30  profilanswer
 

Si les champs GR et BAT sont des chaines de caractères, alors il faudrait mettre des apostrophes comme cela a été fait pour ADR_RUE.

n°1801057
sananas
Posté le 16-10-2008 à 16:18:06  profilanswer
 

olivthill a écrit :

Si les champs GR et BAT sont des chaines de caractères, alors il faudrait mettre des apostrophes comme cela a été fait pour ADR_RUE.


 
Désolé, j'ai pas assez précisé... le problème de ma requête provient de la variable $rue et donc le champ ADR_RUE quand celle-ci comporte un chaine de caractère avec des appostrophes comme ici "rue de l'abbe pierre".
GR, BAT et ADR_NO sont des nombres définis comme DECIMAL ENTIER.
 
Quand le nom de la rue n'a pas d'apostrophe, exemple : "rue du Docteur Frader", je n'ai pas d'erreur répertoriée tout fonctionne normalement...
 
C'est pour cela que je me demande s'il n'existe pas une autre façon d'échapper les apostrophes dans les requêtes SQL pour SQL SERVER par le language PHP...

n°1801065
ionik
Posté le 16-10-2008 à 16:38:52  profilanswer
 

mysql_real_escape_string()


---------------
Recette cookeo Recette de cuisine
n°1801073
sananas
Posté le 16-10-2008 à 17:04:59  profilanswer
 

ionik a écrit :

mysql_real_escape_string()


Peut-être mais je ne travaille pas avec MYSQL mais avec SQL SERVER, les fonctions sont donc nommées mssql, y'a une fonction identique pour du sql server?

n°1801074
sananas
Posté le 16-10-2008 à 17:12:01  profilanswer
 

sananas a écrit :


Peut-être mais je ne travaille pas avec MYSQL mais avec SQL SERVER, les fonctions sont donc nommées mssql, y'a une fonction identique pour du sql server?


 
En doublant les quotes avec str_replace("'", "''",$variable);
Je n'ai plus d'erreur sur les logs...
 
Mais est-ce vraiment correct comme language SQL?
Enfin, ça marche....


Message édité par sananas le 16-10-2008 à 22:13:55
n°1801156
olivthill
Posté le 16-10-2008 à 21:34:36  profilanswer
 

Doublez les quotes est tout à fait correct. Cela fait partie du standard SQL depuis l'origine. Je connais une une demi-douzaine de SGBD différents (dont SQL-server) et tous requierent que les quotes soient doublées quand elles sont à l'intérieur d'une chaine de caractères. Donc le str_replace est aussi ce que je conseillerais, mais je suis grilled.


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

  Problème d'apostrophe PHP et SQL SERVER

 

Sujets relatifs
Probleme Affichage Background dans TableauPetit probléme pour une suppresion d'enregistrement
[PHP/JAVA] Calendrier avec menu avec choix booléen sur chaque jour[UNIX] Problème avec rsh
de xls à SQL serverSQL-tablespace autoextend
Programmation PHPProbleme de compatibilité IE / FireFox, vraiment besoin d'aide !
Plus de sujets relatifs à : Problème d'apostrophe PHP et SQL SERVER


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