Forum Programmation.php variable et requete sql

Posté par  .
Étiquettes : aucune
0
2
juil.
2007
salut à tous!

dites moi est ce que cette écriture est juste:

$x = "select account_id from eqw_accounts where account_type = 'g' and account_lid = $group_info['account_name']";

si cette écriture n'est pas juste, merci de bien vouloir la corriger!!
  • # Ma version

    Posté par  (site web personnel, Mastodon) . Évalué à 2.

    $x = "SELECT `account_id` from `eqw_accounts` WHERE `account_type` = 'g' AND `account_lid`='".$group_info['account_name']."'"; À part ça, account_lid = $group_info['account_name'], il y a au moins un problème de nommage de variable; c'est un ID ou un NAME?

    La gelée de coings est une chose à ne pas avaler de travers.

  • # non

    Posté par  . Évalué à 1.

    En assumant que le contenu de ta variable a déja été échappé comme il faut:

    - Si tu veux interpoler un élément d'un tableau dans une chaine, tu ne dois pas quoter la clé
    - Tu devrais par contre quoter la valeur de account_lid dans ton query si ce n'est pas un entier/double/...

    => ... and account_lid = '$group_info[account_name]'" si tu veux le faire ainsi, sinon peut etre regarder du coté de PDO et des placeholders...
    • [^] # Re: non

      Posté par  (site web personnel) . Évalué à 3.

      NON, NON et NON !!!

      On apprend a faire du php E_STRICT ici !!!

      Quand tu veux ajouter dans une chaîne une variable qui est une entrée de tableau tu dois lui mettre des accolades.

      Exemple :
      $x = "select account_id from eqw_accounts where account_type = 'g' and account_lid = {$group_info['account_name']}";

      Ensuite tu peux aussi pour voir ce que tu fais la quoter avec notion pointé :
      $x = 'select account_id from eqw_accounts where account_type = \'g\' and account_lid = '.$group_info['account_name'];

      Bon là j'utilise des ' comme délimiteur de chaîne car c'est nettement plus rapide de faire un :
      $x = 'quelquechose '.$quelquechose.' quelquechose';
      Que :
      $x = "quelquechose $quelquechose quelquechose";
      • [^] # Re: non

        Posté par  . Évalué à 2.

        On peut même utiliser les fonctions faites pour ça, pour coder "à la C".
        Exemple :
        $x=sprintf ("select account_id from eqw_accounts where account_type = 'g' and account_lid = '%s';", $group_info['account_name']);
        C'est la syntaxe que je préfère pour plusieurs raisons :
        1) on est sûr du type de variable inséré dans la chaîne de caractères.
        2) on peut éventuellement appliquer des fonctions au paramètre (preg_replace, chop, trim, calculs divers)
        3) on peut passer plusieurs paramètres d'un seul coup sans vraiment alourdir la syntaxe, et c'est plus lisible...
        4) pour débugguer, c'est plus facile, il n'y a que le $x = s à mettre en commentaire pour afficher directement le résultat de la commande.
        M'enfin, ce n'est que mon avis, il n'engage que moi.
  • # oui

    Posté par  (site web personnel) . Évalué à 2.

    Syntaxiquement (au sens de php), c'est correct.
    Du point de vue mysql (si c'en est) il reste à vérifier que les noms de la table et des champs sont bons (attention aux majuscules), et que le contenu de la variable correspond bien à ce que tu espères : dans le cas où ta variable est vide, la syntaxe devient mauvaise!

    Attention également aux injections sql :
    Si $group_info['account_name']="0 or 1=1", ta requete va retourner toute ta table... Un conseil : même si le champs account_lid est numérique, mets ta variable entre des quotes, et utilise la fonction mysql_real_escape_string().

    $x = "select account_id from eqw_accounts where account_type = 'g' and account_lid = '" . mysql_real_escape_string($group_info['account_name']) . "'";

    Voir un exemple plus complet sur http://fr3.php.net/manual/fr/function.mysql-real-escape-stri(...) pour le cas où les magic_quotes sont activées...
  • # rien!!!

    Posté par  . Évalué à 1.

    je remerci tout le monde pour ces propositions mais rien ne marche!!!
    • [^] # Re: rien!!!

      Posté par  (site web personnel, Mastodon) . Évalué à 3.

      Et si tu nous donnais un message d'erreur, une ligne de log ou autre chose qui permette à ceux d'entre nous qui ne sont pas doués de voyance d'en savoir plus?

      La gelée de coings est une chose à ne pas avaler de travers.

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.