PHP|Débutant :: Forums

Advertisement

Besoin d'aide ? N'hésitez pas, mais respectez les règles

Vous n'êtes pas identifié(e).

#1 04-02-2011 23:47:08

zad34
Membre
Inscription : 04-02-2011
Messages : 14

Requête mysql paramètrée[Résolu]

Bonsoir à tous,
C'est mon premier post, je m'excuse d'avance.
Mon problème : je prépare une requête paramétrée, elle ne marche pas alors je mets tout à plat, j'écris tout en 4 lignes, la non paramètrée MARCHE l'autre, non, malgré toutes mes lectures et toutes les tentatives rationnelles (ou pas)
Mon problème en code, avant d'y passer la nuit !  (je suis sur OVH)

$table = ‘membres’ ;
$invite= ‘XXX’ ;

$query = 'SELECT concat(nom," __ ",prenom) FROM '.$table.' WHERE (nom = "XXX") ' ;  // elle marche

$query = 'SELECT concat(nom," __ ",prenom) FROM '.$table.' WHERE nom = ".$invite." ' ; // ne marche pas dans le même contexte (substitution )
$result =mysql_query($query) or die ("Erreur B2) ;

/* - liste des mauvais (pas de blocage de syntaxe mais erreur «  or die »
1-  WHERE (nom = '.$invite.' ) ' ;
2- WHERE nom = '.$invite.' ' ;

- liste des bons (passe le or die)  mais ne lit pas la base
 WHERE nom = ".$invite." ' ;  */

Il va sans dire mon niveau, mais faut bien commencer !
Merci d'avance.

Hors ligne

#2 05-02-2011 08:39:31

xTG
GrandGourou
Inscription : 18-06-2009
Messages : 1 127
Site Web

Re : Requête mysql paramètrée[Résolu]

Tu mélanges des simples quotes avec des doubles, c'est pour cela que tu n'obtiens rien. ^^

$invite = mysql_real_escape_string($invite);
$query = "SELECT concat(nom,' __ ',prenom) FROM $table WHERE nom = $invite " ;

Avec ceci cela devrait passer. smile

Hors ligne

#3 05-02-2011 10:58:25

Maljuna Kris
Infantimigulo
Lieu : Douarnenez 29100 Breizh Izel
Inscription : 08-05-2009
Messages : 2 453
Site Web

Re : Requête mysql paramètrée[Résolu]

Saluton,
Déception, à la lecture du titre du post je m'attendais à une question afférente aux requêtes paramétrées sous PDO.
Ici, je ne saurais que conseiller aux débutant d'étudier la fonction sprintf() qui devrait grandement leur faciliter la vie..... avant de se mettre à PDO (de toutes façons).


Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy

Hors ligne

#4 05-02-2011 11:05:59

zad34
Membre
Inscription : 04-02-2011
Messages : 14

Re : Requête mysql paramètrée[Résolu]

Bonjour à tous,
Merci GrandGourou  d'être passé me voir, mais quand tout va mal... J'ai découvert l'usage et l'intérêt de mysql_real_escape_string mais ça ne marche toujours pas ! Je mets plus de code , dont la correction proposée en la généralisant à $table (les essais avec, sans et autres combinaisons ne m'ont rien donné.) pour éventuellement mieux montrer le problème.


function SF1extr_nom_inv_mysql($nom,$prenom,$actif,$table,$invite,$cas)   // cas1 ouverture : :extraction des invités --cas2 extraction des invités de nom $nom
  {GLOBAL $liaison ;
  $invite = 'XXXX' ;//XX pour forcer la recherche
    SSFouverture_mysql() ; 
$invite = mysql_real_escape_string($invite,$liaison); // correction PHPdébutant
$table = mysql_real_escape_string($table,$liaison); // correction inspirée de PHPdébutant
    if ($cas == "cas1" ) {
      $query = 'SELECT concat(nom," __ ",prenom," * actif = ",actif," * invité par : ",inviteur,"  Email = ",email) FROM '.$table.'' ; // cas1 marche
      }
    if ($cas == "cas2" ) {    
      // ça marche --> $query = 'SELECT concat(nom," __ ",prenom) FROM '.$table.' WHERE (nom = "XXXX")';  
     
$query = "SELECT concat(nom,' __ ',prenom) FROM $table WHERE nom = $invite " ;  // là est le problème !
      }
    $result =mysql_query($query) or die ("Erreur B2")  ;
    mysql_close($liaison) ;
    return $result;  
 

Cette fois j'ai fait un copier/ coller par prudence.
C'est avec  espoir que je vous resollicite, J'ai vu beaucoup de warning et de Erreur B2, c'est le cas de ce code, cette nuit !

Hors ligne

#5 05-02-2011 11:23:28

xTG
GrandGourou
Inscription : 18-06-2009
Messages : 1 127
Site Web

Re : Requête mysql paramètrée[Résolu]

Hum oui le soucis doit venir du fait que nom est en varchar. Une erreur de débutant de ma part, il faut donc l'insérer avec des simples quotes. smile

$query = "SELECT concat(nom,' __ ',prenom) FROM $table WHERE nom = '$invite' " ;

Sinon pour nous diriger dans nos recherches il serait intéressant de nous retourner lors d'erreurs sql :
mysql_error()

On pourra placer cette fonction dans le die() du mysql_query() sur le serveur de développement.

Hors ligne

#6 05-02-2011 11:26:59

Pierrot
Ancien nouveau
Inscription : 08-05-2009
Messages : 1 195

Re : Requête mysql paramètrée[Résolu]

Salut,
pour faire plaisir a MK big_smile
avec pdo :

ce n'est pas parce que l'on est débutant qu'il faut employer des méthodes obsolètes wink

   $connexion= new PDO(...);


   $query = "SELECT concat(nom,'__ ',prenom) as nom_prenom FROM :table WHERE nom = :nom" ;
   $res = $connexion->prepare($query);
   $res->bindparam(':nom',$nom);
   $res->bindparam(':table',$table);
   $nom = "une valeur";
   $table = "le nom de la table";
   $res->execute();
   $row = $res->fetch(PDO::FETCH_OBJ);
   echo $row->nom_prenom ;

 

a++

Hors ligne

#7 05-02-2011 12:01:07

zad34
Membre
Inscription : 04-02-2011
Messages : 14

Re : Requête mysql paramètrée[Résolu]

Il y a encore beaucoup de subtilités qui m'échappent (pourquoi pas de cote à $table alors qu'il en faut à $invite ?) mais un grand merci GrandGourou, ces simples cotes m'ont sauvées mon WE ! (
Merci aussi aux conseils pour passer à PDO.... j'y viendrai mais quand on démarre faut bien faire avec ce qu'on a !
Je ne vois rien à cocher pour signaler le problème résolu !

Hors ligne

#8 05-02-2011 12:05:17

Pierrot
Ancien nouveau
Inscription : 08-05-2009
Messages : 1 195

Re : Requête mysql paramètrée[Résolu]

>>j'y viendrai mais quand on démarre faut bien faire avec ce qu'on a !

je crois que tu n'as pas bien compriss wink
ou tu ne sais pas lire ??? !!! big_smile
a++

Hors ligne

#9 05-02-2011 12:31:54

xTG
GrandGourou
Inscription : 18-06-2009
Messages : 1 127
Site Web

Re : Requête mysql paramètrée[Résolu]

La syntaxe la plus correcte qui soit serait en fait :

 $query = "SELECT concat(`nom`,' __ ',`prenom`) FROM `$table` WHERE `nom` = '$invite' " ;

En gros :
` pour protéger les noms de structures (table, attribut)
' pour entourer la valeur d'un champs qui n'est pas numérique

En espérant que cela réponde à ta question. wink

Hors ligne

#10 05-02-2011 12:33:29

zad34
Membre
Inscription : 04-02-2011
Messages : 14

Re : Requête mysql paramètrée[Résolu]

Pour Pierrot : si si j'ai bien compris et tes propos "ce n'est pas parce que l'on est débutant qu'il faut employer des méthodes obsolètes"  sont très positifs, en plus accompagné du code que j'ai précieusement classé.
J'ai aussi suivi le lien de MK et les liens qui suivent pour taper PDO sur OVH : pas de réponse... PDO est donc pour moi, grand débutant, une solution certes mais pour un prochain projet; Celui-ci va déboucher, il me fera plaisir et qui plus est , il est attendu.
C'est donc un question de délai et nous en sommes tous là...
Merci quand même et A+

Hors ligne

Pied de page des forums