Salut Abdel et tous. Merci pour ces exemples super claires. Par contre quel est l’intérêt de l’une ou l’autre des méthodes ? Je veux dire quel est l’intérêt d’utiliser bindParam()/bindvalue ou passer les valeurs dans execute() Merci.
> Le 31 juil. 2017 à 16:26, Abdel <[email protected]> a écrit : > > Recoucou Christophe, > > Je vais essayer de te répondre par rapport à la différence entre bindParam et > bindValue. > > Avec bindParam, ce n'est pas la valeur de ta variable qui est utilisée avant > l'exécution, mais sa référence. > > Ainsi, si tu changes entre 2 exécutions la valeur de ta variable, la > prochaine exécution prendra en compte la dernière valeur affectée. > > Avec bindValue, c'est la valeur de la variable qui est utilisée, pas sa > référence. > > Ainsi, après chaque exécution, c'est toujours la toute première valeur > affectée à ta variable qui est utilisée. > > Mais rien ne vaut un bon exemple : > > Exemple 1 avec bindParam : > > $prenom = 'Abdel'; > $req = $db->prepare('SELECT nom FROM colistiers WHERE prenom = :prenom'); > $req->bindParam(':prenom', $prenom, PDO::PARAM_STR); > $prenom = 'Christophe'; > $req->execute(); // Sera exécutée avec Christophe comme prenom. > > Exemple 2 avec bindValue : > > $prenom = 'Abdel'; > $req = $db->prepare('SELECT nom FROM colistiers WHERE prenom = :prenom'); > $req->bindValue(':prenom', $prenom, PDO::PARAM_STR); > $prenom = 'Christophe'; > $req->execute(); // Sera exécutée avec Abdel comme prenom. > > L'utilisation d'un array en paramètre de la méthode execute peut être aussi > un très bon moyen de passer plusieurs paramètres en une seule opération. > > $req = $db->prepare('INSERT INTO membres (nom, prenom, pseudo) VALUES (:nom, > :prenom, :pseudo)'); > $req->execute(array('nom' => $nom, 'prenom' => $prenom, 'pseudo' => $pseudo)); > > Voila, j'espère avoir été assez claire. > > N'hésite pas à reposter si besoin. > > Bien amicalement, > Abdel. > > -----Message d'origine----- From: Christophe Garnier > Sent: Monday, July 31, 2017 1:41 PM > To: Proglist > Subject: [progliste] Re: Recherche de car actèr es et base de données > > Salut. Génial ! Ça marche. Perso j’utilise la première méthode. Par contre je > n’arrive pas à comprendre la différence entre bindparam et bindvalue. Si > quelqu’un peut me l’expliquer je suis preneur. En tous cas c’est cool car > maintenant mes recherches sont beaucoup plus souples avec les % > Bonne journée à tous et un grand merci pour l’existence de cette liste > > >> Le 31 juil. 2017 à 12:54, Abdel <[email protected]> a écrit : >> >> Coucou Christophe, >> >> Pour passer des paramètres à une requête préparée avec l'extension PDO, >> j'utilise personnellement 2 méthodes, qui sont les suivantes : >> >> 1. Méthode 1 : >> >> $stmt->bindValue(':pseudo', '%'.$pseudo.'%', PDO::PARAM_STR); >> $stmt->execute (); >> >> 2. Méthode 2 : >> >> Je passe directement les paramètres lors de l'exécution de la requête >> préparée, comme suit : >> >> $stmt->execute (array ('pseudo', '%'.$pseudo.'%')); >> >> Remarque que dans la seconde méthode, je ne mets pas le ":" pour faire >> référence au marqueur nominatif. >> >> bindParam ne fonctionne pas très bien avec PDO chez moi aussi, tu n'es pas >> le seul. >> >> Autrement, dans l'exemple de mon précédent message, le nom de la table >> "membres" est au pluriel, tu dois la mettre au singulier pour ton cas, car >> apparemment, ta table "membre" est au singulier. >> >> Voili voilou, merci à toi. >> >> Bien amicalement, >> Abdel. >> >> -----Message d'origine----- From: Christophe Garnier >> Sent: Monday, July 31, 2017 10:46 AM >> To: Proglist >> Subject: [progliste] Re: Recherche de car actères et base de données >> >> Salut Abdel et tous >> Merci beaucoup pour ton code. En fait j’utilise déjà pro et les requêtes >> préparées avec bindparap >> Malheureusement bindparap n’excepte pas ce que je lui entre. Voici la ligne >> et le message d’erreur. >> //Je mets la requête dans une constante >> const CHERCHERMEMBRE = 'select id, pseudo from membre where pseudo like >> :pseudo'; >> //La ligne qui ne marche pas. >> $stmt->bindParam(":pseudo", '%'.$pseudo.'%', PDO::PARAM_STR); >> Voici le message d’erreur dans le blog >> [31-Jul-2017 11:31:32 Europe/Berlin] PHP Fatal error: Uncaught Error: >> Cannot pass parameter 2 by reference in >> /Applications/MAMP/htdocs/classe/MembreManager.php:132 >> Merci d’avance >> >> >> >> >> >>> Le 30 juil. 2017 à 00:33, Abdel <[email protected]> a écrit : >>> >>> Resalut Christophe, >>> >>> En PDO, je vais te donner la syntaxe entière pour préparer une requête de >>> recherche dans une BDD, avec les commentaires qui vont avec. >>> >>> Je suis certain que tu vas apprécier la simplicité d'utilisation de cette >>> extension ! >>> >>> Le fichier view.php est en PJ, si tu veux, tu pourras le définir comme >>> action à ton formulaire. >>> >>> Tu devras bien entendu préciser le nom de ta bdd, ainsi que le nom >>> d'utilisateur et le mot de passe. >>> >>> Le nom du serveur devra être modifié également s'il est différent de >>> localhost. >>> >>> <!-- début du code --> >>> <?php >>> // Récupération du pseudo à partir du formulaire. >>> $pseudo = $_POST['pseudo']; >>> // Connexion à la BDD. >>> $db = new PDO('mysql:host=localhost;dbname=nomDeLaBDD;charset=utf8', >>> 'nomDutilisateur', 'motDePasse'); >>> // Création de la requête préparée en utilisant un marqueur nominatif. >>> $query = $db->prepare('SELECT id, pseudo FROM membres WHERE pseudo LIKE >>> :pseudo'); >>> // Exécution de la requête en lui passant le pseudo en paramètre entourée >>> des symboles '%'. >>> $query->execute(array('pseudo' => '%' . $pseudo . '%')); >>> // Si le nombre de résultats est supérieur à 0. >>> if ($query->rowCount() > 0) >>> { >>> // On crée un tableau pour accueillir les données résultantes de la >>> recherche. >>> echo "<table border=\"1\">\n"; >>> // Récupération des données dans un tableau associatif pour chaque ligne de >>> résultat. >>> foreach ($query->fetchAll(PDO::FETCH_ASSOC) as $row) { >>> // On extrait uniquement les clés des tableaux dans une variable $clé. >>> extract ($row); >>> echo "<tr><td>'$id'</td><td>'$pseudo'</td></tr>\n"; >>> } >>> echo '</table>'; >>> } >>> else >>> { >>> // Le nombre de résultats est égal à 0, rien trouvé ! >>> echo '<p>Pas de résultats !</p>'; >>> } >>> ?> >>> <!-- Fin du code --> >>> >>> Voila, dis-moi ce que tu en penses ! >>> >>> Bien amicalement, >>> Abdel. >>> >>> >>> >>> -----Message d'origine----- From: Abdel >>> Sent: Saturday, July 29, 2017 5:31 PM >>> To: [email protected] >>> Subject: [progliste] Re: Recherche de caractères et base de données >>> >>> Salut Christophe, >>> >>> Dans ce cas, tu peux utiliser une requête préparée avec marqueur >>> non-nominatif "?". >>> >>> Quelle méthode utilise-tu pour exécuter ta requête préparée? >>> >>> Quelle est la version du PHP que tu utilises sur ton serveur? >>> >>> Si elle est assez récente, je te conseille vivement de passer à mysqli ou >>> PDO, car ces 2 extensions proposent la méthode prepare en orienté objet, qui >>> est fort appréciable et beaucoup plus d'actualité. >>> >>> Si tu veux toutefois rester avec mySQL, essai ce qui suit : >>> >>> PREPARE recherche FROM 'SELECT id, pseudo FROM membre WHERE pseudo LIKE ?'; >>> SET @pseudo = CONCAT ('%', $_POST['pseudo'], '%'; >>> EXECUTE recherche USING @pseudo; >>> >>> Bien amicalement, >>> Abdel. >>> >>> -----Message d'origine----- From: Christophe Garnier >>> Sent: Friday, July 28, 2017 9:34 AM >>> To: Proglist >>> Subject: [progliste] Re: Recherche de caractères et b ase de données >>> >>> >>> Être Bonjour. Merci beaucoup pour ces explications mais ça ne fonctionne >>> pas. Concrètement j’utilise des requêtes préparées avec des marqueurs et non >>> des variables ; >>> Ma requête de base est >>> 'select id, pseudo from membre where pseudo =:pseudo'; >>> Si je la modifie avec like % j’ai essayé >>> 'select id, pseudo from membre where pseudo like "%:pseudo%"'; >>> Quand je dis ça marche pas je veux dire précisément que la recherche ne >>> donne aucun résultat même en mettant le pseudo complet dans la recherche. >>> Merci >>> >>> >>> >>>> Le 27 juil. 2017 à 08:25, Abdel <[email protected]> a écrit : >>>> >>>> Coucou Christophe, >>>> >>>> Je corrige tout d'abord le sujet de la discussion car il est un peu confus >>>> avec ces caractères illisibles. >>>> >>>> Lorsque tu soumets ton formulaire en utilisant la méthode "post", à un >>>> fichier script de traitement PHP, tu dois savoir que les champs de ton >>>> formulaire soumis se transforment automatiquement en variables PHP de type >>>> tableau associatif. >>>> >>>> Ainsi, un champ "pseudo" dans le formulaire original verra sa valeur >>>> stockée dans une variable $_POST['pseudo'] une fois dans le script de >>>> traitement PHP. >>>> >>>> Puisque ta version de PHP t'autorise encore à utiliser mysql, voici >>>> comment tu devras orienter ta requête. >>>> >>>> // On stocke le champ pseudo dans une variable $pseudo. >>>> $pseudo = $_POST['pseudo']; >>>> // Voici maintenant la requête de recherche des occurrences saisies dans >>>> le formulaire. >>>> $requete = mysql_query ("select id, pseudo from membre where pseudo like >>>> '%$pseudo%'"); >>>> >>>> Si ta bdd comporte des données personnelles, il est préférable d'échapper >>>> les occurrences saisies avec la fonction mysql_real_escape_string, afin de >>>> protéger tes données contre les injections SQL. >>>> >>>> // On stocke le champ pseudo dans une variable $pseudo en échappant les >>>> caractères spéciaux. >>>> $pseudo = mysql_real_escape_string($_POST['pseudo']); >>>> // Voici maintenant la requête de recherche des occurrences saisies dans >>>> le formulaire. >>>> $requete = mysql_query ("select id, pseudo from membre where pseudo like >>>> '%$pseudo%'"); >>>> >>>> En fait, on peut considérer que notre ami Yannick a répondu à 90% de ta >>>> demande, je me suis chargé des 10% restants en répondant à ta seconde >>>> question. >>>> >>>> Voili voilou, teste et dis-nous si ça marche. >>>> >>>> Bien amicalement, >>>> Abdel. >>>> >>>> -----Message d'origine----- From: Christophe Garnier >>>> Sent: Tuesday, July 25, 2017 2:24 PM >>>> To: Proglist >>>> Subject: [progliste] >>>> �tf-8?B?UmU6IFtwcm9nbGlzdGVdIO+/vXRmLTg/UT9SZWNoZXJjaGVfZGVf?�tf-8?B?Y2FyYWN0w6hyZXNfZXRfYmFzZV9kZV9kb25uw6llc18/TWVzc2FnZS1JZDog?�tf-8?B?PDFGNkM3RSAyQS1DQzVGLTQ4NTctQUI3RS1ENUVDNDY1RDI4RDNAZ21haWwu?�tf-8?B?Y29tPg�Date: >>>> Tue, 25 Jul 2017 15:24:17 +0200 >>>> >>>> bonjour. Merci c’est très claire. Mais dans l’administration du site je >>>> veux par exemple dans un champ de formulaire, rechercher un utilisateur >>>> qui s’appelle christophe. Mais admettons que je ne sache pas exactement >>>> comment ça s’écrit. Je veux rentrer par exemple tophe dans mon champ de >>>> formulaire. ensuite je veux qu’en validant la recherche, qu’elle trouve >>>> tous les éléments qui contiennent tophe. Je traite ça en php et mysql via >>>> des requêtes préparées. Pour l’instant voici la requête que j’avais >>>> effectué avant de poser la question sur le forum. >>>> >>>> >>>> 'select id, pseudo from membre where pseudo =:pseudo'; >>>> Merci >>>> >>>> >>>>> Le 25 juil. 2017 à 13:45, Yannick Youalé <[email protected]> a >>>>> écrit : >>>>> >>>>> Salut Christophe, >>>>> >>>>> >>>>> Pour résoudre ton problème tu dois apprendre à placer le caractère % dans >>>>> tes requêtes mysql et utiliser le mot clé de comparaison "LIKE". >>>>> >>>>> >>>>> Exemple pour trouver un nom qui commence par "yan" voici une requête: >>>>> >>>>> >>>>> SELECT nom FROM membres WHERE nom LIKE 'yan%' >>>>> >>>>> >>>>> Si tu veux trouver les noms qui ont la chaîne "yan" à l'intérieur, tu >>>>> peux employer une requête de ce genre: >>>>> >>>>> SELECT nom WHERE nom LIKE '%yan%' >>>>> >>>>> >>>>> Et là, quelle que soit la position de la chaîne "yan" dans le nom, il >>>>> sera retenu. >>>>> >>>>> >>>>> J'espère que tu as compris le truc. >>>>> >>>>> >>>>> Yannick Daniel Youalé >>>>> La programmation est une religion. Aimez-la, ou quittez-la. >>>>> www.visuweb.net >>>>> >>>>> >>>>> Le 25/07/2017 à 09:30, Christophe Garnier a écrit : >>>>>> Salut à tous. >>>>>> Je crée une interface d’administration de mon site pour par exemple >>>>>> avoir la liste des membres, supprimer un ou tous les membres… >>>>>> J’utilise mysql pour la bdd. >>>>>> Si je cherche un membre par son pseudo complet ça fonctionne bien. Par >>>>>> contre si je frappe par exemple les 4 premières lettres du pseudo, il >>>>>> n’est pas trouvé. Quelle est la solution pour que ça fonctionne ? >>>>>> Merci >>>>>> >>>>>> Progliste : >>>>>> Pour se d�sinscrire de la liste : >>>>>> mailto:[email protected]?subject=unsubscribe >>>>>> >>>>>> Pour voir les archives de la liste : >>>>>> http://www.mail-archive.com/[email protected]/ >>>>>> >>>>>> Je vous rappelle que les pi�ces jointe sont activ�s leur taille est >>>>>> limit� � 2 MO >>>>>> >>>>>> Pour acc�der aux fichiers de la liste >>>>>> http://outils.archive-host.com/partage.php?id=2Qar9Hy6ftzr >>>>>> Ou en utilisant la nouvelle page de partage : >>>>>> http://outils-n.archive-host.com/partage-fm0m7b947vglikp9Efpso94gt >>>>>> Pour y ajouter des fichiers demandez-moi le ou sur la liste ou en priv�, >>>>>> je vous r�pondrez en priv�. >>>>>> >>>>>> >>>>>> >>>>>> --- >>>>>> Cet email a fait l'objet d'une analyse antivirus par AVG. >>>>>> http://www.avg.com >>>>>> >>>>> >>>>> >>>>> Progliste : >>>>> Pour se d�sinscrire de la liste : >>>>> mailto:[email protected]?subject=unsubscribe >>>>> >>>>> Pour voir les archives de la liste : >>>>> http://www.mail-archive.com/[email protected]/ >>>>> >>>>> Je vous rappelle que les pi�ces jointe sont activ�s leur taille est >>>>> limit� � 2 MO >>>>> Pour acc�der aux fichiers de la liste >>>>> http://outils.archive-host.com/partage.php?id=2Qar9Hy6ftzr >>>>> Ou en utilisant la nouvelle page de partage : >>>>> http://outils-n.archive-host.com/partage-fm0m7b947vglikp9Efpso94gt >>>>> Pour y ajouter des fichiers demandez-moi le ou sur la liste ou en priv�, >>>>> je vous r�pondrez en priv�. >>>>> >>>>> >>>> >>>> Progliste : >>>> Pour se d�sinscrire de la liste : >>>> mailto:[email protected]?subject=unsubscribe >>>> >>>> Pour voir les archives de la liste : >>>> http://www.mail-archive.com/[email protected]/ >>>> >>>> Je vous rappelle que les pi�ces jointe sont activ�s leur taille est limit� >>>> � 2 MO >>>> >>>> Pour acc�der aux fichiers de la liste >>>> http://outils.archive-host.com/partage.php?id=2Qar9Hy6ftzr >>>> Ou en utilisant la nouvelle page de partage : >>>> http://outils-n.archive-host.com/partage-fm0m7b947vglikp9Efpso94gt >>>> Pour y ajouter des fichiers demandez-moi le ou sur la liste ou en priv�, >>>> je vous r�pondrez en priv�. >>>> >>>> Progliste : >>>> Pour se d�sinscrire de la liste : >>>> mailto:[email protected]?subject=unsubscribe >>>> >>>> Pour voir les archives de la liste : >>>> http://www.mail-archive.com/[email protected]/ >>>> >>>> Je vous rappelle que les pi�ces jointe sont activ�s leur taille est limit� >>>> � 2 MO >>>> Pour acc�der aux fichiers de la liste >>>> http://outils.archive-host.com/partage.php?id=2Qar9Hy6ftzr >>>> Ou en utilisant la nouvelle page de partage : >>>> http://outils-n.archive-host.com/partage-fm0m7b947vglikp9Efpso94gt >>>> Pour y ajouter des fichiers demandez-moi le ou sur la liste ou en priv�, >>>> je vous r�pondrez en priv�. >>>> >>>> >>> >>> Progliste : >>> Pour se d�sinscrire de la liste : >>> mailto:[email protected]?subject=unsubscribe >>> >>> Pour voir les archives de la liste : >>> http://www.mail-archive.com/[email protected]/ >>> >>> Je vous rappelle que les pi�ces jointe sont activ�s leur taille est limit� � >>> 2 MO >>> >>> Pour acc�der aux fichiers de la liste >>> http://outils.archive-host.com/partage.php?id=2Qar9Hy6ftzr >>> Ou en utilisant la nouvelle page de partage : >>> http://outils-n.archive-host.com/partage-fm0m7b947vglikp9Efpso94gt >>> Pour y ajouter des fichiers demandez-moi le ou sur la liste ou en priv�, je >>> vous r�pondrez en priv�. >>> >>> Progliste : >>> Pour se d�sinscrire de la liste : >>> mailto:[email protected]?subject=unsubscribe >>> >>> Pour voir les archives de la liste : >>> http://www.mail-archive.com/[email protected]/ >>> >>> Je vous rappelle que les pi�ces jointe sont activ�s leur taille est limit� >>> � 2 MO >>> >>> Pour acc�der aux fichiers de la liste >>> http://outils.archive-host.com/partage.php?id=2Qar9Hy6ftzr >>> Ou en utilisant la nouvelle page de partage : >>> http://outils-n.archive-host.com/partage-fm0m7b947vglikp9Efpso94gt >>> Pour y ajouter des fichiers demandez-moi le ou sur la liste ou en priv�, je >>> vous r�pondrez en priv�. >>> <view.php> >> >> Progliste : >> Pour se d�sinscrire de la liste : >> mailto:[email protected]?subject=unsubscribe >> >> Pour voir les archives de la liste : >> http://www.mail-archive.com/[email protected]/ >> >> Je vous rappelle que les pi�ces jointe sont activ�s leur taille est limit� � >> 2 MO >> >> Pour acc�der aux fichiers de la liste >> http://outils.archive-host.com/partage.php?id=2Qar9Hy6ftzr >> Ou en utilisant la nouvelle page de partage : >> http://outils-n.archive-host.com/partage-fm0m7b947vglikp9Efpso94gt >> Pour y ajouter des fichiers demandez-moi le ou sur la liste ou en priv�, je >> vous r�pondrez en priv�. >> >> Progliste : >> Pour se d�sinscrire de la liste : >> mailto:[email protected]?subject=unsubscribe >> >> Pour voir les archives de la liste : >> http://www.mail-archive.com/[email protected]/ >> >> Je vous rappelle que les pi�ces jointe sont activ�s leur taille est limit� � >> 2 MO >> Pour acc�der aux fichiers de la liste >> http://outils.archive-host.com/partage.php?id=2Qar9Hy6ftzr >> Ou en utilisant la nouvelle page de partage : >> http://outils-n.archive-host.com/partage-fm0m7b947vglikp9Efpso94gt >> Pour y ajouter des fichiers demandez-moi le ou sur la liste ou en priv�, je >> vous r�pondrez en priv�. >> >> > > Progliste : > Pour se d�sinscrire de la liste : > mailto:[email protected]?subject=unsubscribe > > Pour voir les archives de la liste : > http://www.mail-archive.com/[email protected]/ > > Je vous rappelle que les pi�ces jointe sont activ�s leur taille est limit� � > 2 MO > > Pour acc�der aux fichiers de la liste > http://outils.archive-host.com/partage.php?id=2Qar9Hy6ftzr > Ou en utilisant la nouvelle page de partage : > http://outils-n.archive-host.com/partage-fm0m7b947vglikp9Efpso94gt > Pour y ajouter des fichiers demandez-moi le ou sur la liste ou en priv�, je > vous r�pondrez en priv�. > > Progliste : > Pour se d�sinscrire de la liste : > mailto:[email protected]?subject=unsubscribe > > Pour voir les archives de la liste : > http://www.mail-archive.com/[email protected]/ > > Je vous rappelle que les pi�ces jointe sont activ�s leur taille est limit� � > 2 MO > Pour acc�der aux fichiers de la liste > http://outils.archive-host.com/partage.php?id=2Qar9Hy6ftzr > Ou en utilisant la nouvelle page de partage : > http://outils-n.archive-host.com/partage-fm0m7b947vglikp9Efpso94gt > Pour y ajouter des fichiers demandez-moi le ou sur la liste ou en priv�, je > vous r�pondrez en priv�. > > Progliste : Pour se d�sinscrire de la liste : mailto:[email protected]?subject=unsubscribe Pour voir les archives de la liste : http://www.mail-archive.com/[email protected]/ Je vous rappelle que les pi�ces jointe sont activ�s leur taille est limit� � 2 MO Pour acc�der aux fichiers de la liste http://outils.archive-host.com/partage.php?id=2Qar9Hy6ftzr Ou en utilisant la nouvelle page de partage : http://outils-n.archive-host.com/partage-fm0m7b947vglikp9Efpso94gt Pour y ajouter des fichiers demandez-moi le ou sur la liste ou en priv�, je vous r�pondrez en priv�.
