Partant du principe que les requetes suivantes donnent les même résultat, laquelle est la plus correcte ?
$variable="ma_variable";
$requete1='SELECT * FROM table WHERE champ=''.$variable.''';
$requete2="SELECT * FROM table WHERE champ='$vavariable'";
$equete3="SELECT * FROM table WHERE champ='".$vavariable."'";
Merci de vos réponses.
C'est surtout une question de préférence.
La 2ème est la plus simple a survoler.
<bruit> Mais dans ce cas seul la 1ère fonctionnera correctement. $vavariable n'est pas déclarée ;P </bruit>
Guillaume Brocker
Partant du principe que les requetes suivantes donnent les même résultat, laquelle est la plus correcte ?
$variable="ma_variable";
$requete1='SELECT * FROM table WHERE champ=''.$variable.''';
$requete2="SELECT * FROM table WHERE champ='$vavariable'";
$equete3="SELECT * FROM table WHERE champ='".$vavariable."'";
Toutes les trois sont correctes pour l'exemple donné mais on peut aller plus loin, même si je me dirige doucement vers le hors sujet :) .
Imaginons que $variable soit une valeur entrée par un utilisateur via un formulaire et dont on ne peut donc pas prédire la valeur. Avant de passer son contenu dans une requête, il faut encore s'assurer qu'il n'y ait ni de <'>, ni de <">, sinon la requête va échouer à coup sur lors de l'exécution.
Voici un petit exemple.
$variable = "contenu d'une variable"; $requete = "SELECT * FROM table WHERE champ='$variable'";
Quand php fera la substitution de $variable pas sa valeur, nous obtiendrons:
$requete = "SELECT * FROM table WHERE champ='contenu d'une variable'";
Pour php, tout est en ordre. Par contre pour la base de donnée, il y aura une erreur, comme le montre l'illustration ci-après: _________ ____________ | | | SELECT * FROM table WHERE champ='contenu d'une variable'
Pour parfaire le hors sujet :), l'api de MySQL propose deux fonctions (mysql_escape_string et mysql_real_escape_string) qui banalisent tous <'> et <"> présent dans une chaîne de caractères. Une chaîne ainsi traitée pourra être utilisée dans une requête en toute sécurité. Pour les détails, consulter les liens suivants:
Partant du principe que les requetes suivantes donnent les même résultat,
laquelle est la plus correcte ?
$variable="ma_variable";
$requete1='SELECT * FROM table WHERE champ=''.$variable.''';
$requete2="SELECT * FROM table WHERE champ='$vavariable'";
$equete3="SELECT * FROM table WHERE champ='".$vavariable."'";
Toutes les trois sont correctes pour l'exemple donné mais on peut aller
plus loin, même si je me dirige doucement vers le hors sujet :) .
Imaginons que $variable soit une valeur entrée par un utilisateur via un
formulaire et dont on ne peut donc pas prédire la valeur. Avant de
passer son contenu dans une requête, il faut encore s'assurer qu'il n'y
ait ni de <'>, ni de <">, sinon la requête va échouer à coup sur lors de
l'exécution.
Voici un petit exemple.
$variable = "contenu d'une variable";
$requete = "SELECT * FROM table WHERE champ='$variable'";
Quand php fera la substitution de $variable pas sa valeur, nous obtiendrons:
$requete = "SELECT * FROM table WHERE champ='contenu d'une variable'";
Pour php, tout est en ordre. Par contre pour la base de donnée, il y
aura une erreur, comme le montre l'illustration ci-après:
_________ ____________
| | |
SELECT * FROM table WHERE champ='contenu d'une variable'
Pour parfaire le hors sujet :), l'api de MySQL propose deux fonctions
(mysql_escape_string et mysql_real_escape_string) qui banalisent tous
<'> et <"> présent dans une chaîne de caractères. Une chaîne ainsi
traitée pourra être utilisée dans une requête en toute sécurité. Pour
les détails, consulter les liens suivants:
Partant du principe que les requetes suivantes donnent les même résultat, laquelle est la plus correcte ?
$variable="ma_variable";
$requete1='SELECT * FROM table WHERE champ=''.$variable.''';
$requete2="SELECT * FROM table WHERE champ='$vavariable'";
$equete3="SELECT * FROM table WHERE champ='".$vavariable."'";
Toutes les trois sont correctes pour l'exemple donné mais on peut aller plus loin, même si je me dirige doucement vers le hors sujet :) .
Imaginons que $variable soit une valeur entrée par un utilisateur via un formulaire et dont on ne peut donc pas prédire la valeur. Avant de passer son contenu dans une requête, il faut encore s'assurer qu'il n'y ait ni de <'>, ni de <">, sinon la requête va échouer à coup sur lors de l'exécution.
Voici un petit exemple.
$variable = "contenu d'une variable"; $requete = "SELECT * FROM table WHERE champ='$variable'";
Quand php fera la substitution de $variable pas sa valeur, nous obtiendrons:
$requete = "SELECT * FROM table WHERE champ='contenu d'une variable'";
Pour php, tout est en ordre. Par contre pour la base de donnée, il y aura une erreur, comme le montre l'illustration ci-après: _________ ____________ | | | SELECT * FROM table WHERE champ='contenu d'une variable'
Pour parfaire le hors sujet :), l'api de MySQL propose deux fonctions (mysql_escape_string et mysql_real_escape_string) qui banalisent tous <'> et <"> présent dans une chaîne de caractères. Une chaîne ainsi traitée pourra être utilisée dans une requête en toute sécurité. Pour les détails, consulter les liens suivants: