Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD > PHP & SQL-Server
PHP & SQL-Server Forum d'entraide sur SQL-Server avec PHP. Avant de poster -> FAQ SQL-Server
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 05/05/2006, 05h35   #1
Nouveau Membre du Club
 
Inscription : février 2006
Messages : 197
Détails du profil
Informations forums :
Inscription : février 2006
Messages : 197
Points : 31
Points : 31
Par défaut Problèmes de guillemets et quotes dans un INSERT

Bonne nuit

Je me bats avec PHP et SQL Serveur, pour essayer d'inserer une chaine dans ma base de donnée de manière securisée.

La chaine en question :

Citation:
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 idée ?

MERCI de votre aide.
gregb34 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/05/2006, 09h37   #2
Membre habitué
 
Homme Nicolas BUI
Consultant CRM
Inscription : mai 2006
Messages : 99
Détails du profil
Informations personnelles :
Nom : Homme Nicolas BUI
Âge : 35
Localisation : France, Val de Marne (Île de France)

Informations professionnelles :
Activité : Consultant CRM
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : mai 2006
Messages : 99
Points : 145
Points : 145
Envoyer un message via Skype™ à 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 délimitateur " (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 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 05/05/2006, 09h40   #3
Membre habitué
 
Homme Nicolas BUI
Consultant CRM
Inscription : mai 2006
Messages : 99
Détails du profil
Informations personnelles :
Nom : Homme Nicolas BUI
Âge : 35
Localisation : France, Val de Marne (Île de France)

Informations professionnelles :
Activité : Consultant CRM
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : mai 2006
Messages : 99
Points : 145
Points : 145
Envoyer un message via Skype™ à 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
nicolas.bui est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 15h31.


 
 
 
 
Partenaires

Hébergement Web