# PHP > PHP & Base de donnes > [SQL-Server] Problmes de guillemets et quotes dans un INSERT

## gregb34

Bonne nuit  :;): 

Je me bats avec PHP et SQL Serveur, pour essayer d'inserer une chaine dans ma base de donne de manire securise.

La chaine en question :




> Residence " Les Jeux d'O "


Je souhaite eviter les SQL INJECTION ... Le probleme c'est que je suis sous SQL Serveur et pas moyen d'utiliser mysql_real_escape_string(), 

Je me perds dans les ' et " dans mon INSERT et au final ca marche pas, si qqu a une ide ?

MERCI de votre aide.

----------


## nicolas.bui

normallement ton seul probleme serais le simple quote puisque c la seul syntax officiel de SQL.
apres fo pas melanger PHP et SQL Server. Il faut se dire PHP va mon pondre une chaine comme ca et qui sera transmit  SQL serveur.

Cot php tu fait ce que tu veux, mais au final, voila ce qu'il faut transmettre  SQL serveur par exemple:
INSERT INTO table ( nom, prenom ) VALUES( 'BUI', 'Nicolas' );

Donc il faut savoir comme se comporte une chaine en PHP. une chaine en php peut avoir deux type de dlimitateur  " (double) et ' (simple).
$s = 'Ma chaine';
$s = "Ma chaine";


Dans une chaine delimit par un simple quote pour faire apparaitre un simple quote, on place un antislash:
$s = '-- J\'suis la --';
idem pour la double 
$s = "Bienvenu Nicolas, alias le \"BOSS\" !";

supposons que qu'on insere une phase ds la base:
J'suis nicolas bui

d'abord, il fo choisir en php si on entoure avec des simples des doubles. 
$s = "J'suis nicolas bui";
ou
$s = 'J\'suis nicolas bui';
donc en sortie on a ==> J'suis nicolas bui

Mais maintenant on le balance dans le SQL :
$sql ="INSERT INTO .... ( '". $s ."' )";
cela donne : INSERT INTO ... ( 'J'suis nicolas bui' )
Aucun SGBD n'aime ... il faut faire soit doubler le simple quote :
INSERT INTO ... ( 'J''suis nicolas bui' )
ou foutre un anti slash :
INSERT INTO ... ( 'J\'suis nicolas bui' );

donc en php 
$sql ="INSERT INTO .... ( '". str_replace( "'", "''", $s ) ."' )";
ou
$sql ="INSERT INTO .... ( '". str_replace( "'", "\\'", $s ) ."' )";

Et normallement ca passe  ::):

----------


## nicolas.bui

Donc pour ton :
Residence " Les Jeux d'O "

on doit avoir 
INSERT ... ( 'Residence " Les Jeux d''O "' )
ou
INSERT ... ( 'Residence " Les Jeux d\'O "' )

cot php 
$s = "Residence \" Les Jeux d'O \"";
puis
$sql = "INSERT ... ( '" . str_replace( "'", "''", $s ) . "' );";
ou 
$sql = "INSERT ... ( '" . str_replace( "'", "\'", $s ) . "' );";

Voila bonne chance

----------

