Problème d'apostrophe PHP et SQL SERVER

Problème d'apostrophe PHP et SQL SERVER - PHP - Programmation

Marsh Posté le 16-10-2008 à 10:56:03    

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

Marsh Posté le 16-10-2008 à 10:56:03   

Reply

Marsh Posté le 16-10-2008 à 13:36:30    

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.

Reply

Marsh Posté le 16-10-2008 à 16:18:06    

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

Reply

Marsh Posté le 16-10-2008 à 16:38:52    

mysql_real_escape_string()


---------------
Recette cookeo Recette de cuisine
Reply

Marsh Posté le 16-10-2008 à 17:04:59    

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?

Reply

Marsh Posté le 16-10-2008 à 17:12:01    

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
Reply

Marsh Posté le 16-10-2008 à 21:34:36    

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.

Reply

Sujets relatifs:

Leave a Replay

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