Requête SQL disfonctionnelle
Résolu/Fermé
nassou01
Messages postés
8
Date d'inscription
dimanche 30 avril 2017
Statut
Membre
Dernière intervention
11 juin 2017
-
Modifié le 13 mai 2017 à 20:24
nassou01 Messages postés 8 Date d'inscription dimanche 30 avril 2017 Statut Membre Dernière intervention 11 juin 2017 - 10 juin 2017 à 21:00
nassou01 Messages postés 8 Date d'inscription dimanche 30 avril 2017 Statut Membre Dernière intervention 11 juin 2017 - 10 juin 2017 à 21:00
A voir également:
- Requête SQL disfonctionnelle
- Logiciel sql - Télécharger - Bases de données
- Requete sql pix - Forum PHP
- Erreur lors de l'envoi de la requête facebook marketplace - Forum Facebook
- Il y a eu un problème avec cette requête. nous travaillons à sa résolution aussi vite que nous le pouvons. - Forum Facebook
- Additions et multiplication dans des requêtes SQL ✓ - Forum MySQL
3 réponses
NHenry
Messages postés
15194
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
23 février 2025
353
13 mai 2017 à 20:29
13 mai 2017 à 20:29
La méthode utilisée, remplace ":ordre" par la valeur passée, mais celle-ci est considérée comme une valeur et non pas comme un nom de colonne.
Il faut pré-préparer la requête SQL directement avec le bon Order By (le WHERE peut rester en requête préparée).
Il faut pré-préparer la requête SQL directement avec le bon Order By (le WHERE peut rester en requête préparée).
jee pee
Messages postés
40904
Date d'inscription
mercredi 2 mai 2007
Statut
Modérateur
Dernière intervention
8 mars 2025
9 556
Modifié le 13 mai 2017 à 20:33
Modifié le 13 mai 2017 à 20:33
Salut,
Je n'utilise pas php, je vais donc juste faire une remarque de logique. Order by attend un nom de champ, pas une valeur comme possesseur avec des quotes.
une requête devrait avoir comme syntaxe '
cdlt
un étranger, c'est un ami qu'on n'a pas encore rencontré.
Je n'utilise pas php, je vais donc juste faire une remarque de logique. Order by attend un nom de champ, pas une valeur comme possesseur avec des quotes.
une requête devrait avoir comme syntaxe '
SELECT * FROM jeux_video WHERE possesseur="Corentin" ORDER BY prix' et non
'SELECT * FROM jeux_video WHERE possesseur="Corentin" ORDER BY "prix"'Corentin et prix ne devraient pas être traités en résultat de la même façon l'un doit avoir de quotes, l'autre pas.
cdlt
un étranger, c'est un ami qu'on n'a pas encore rencontré.
nassou01
Messages postés
8
Date d'inscription
dimanche 30 avril 2017
Statut
Membre
Dernière intervention
11 juin 2017
13 mai 2017 à 21:10
13 mai 2017 à 21:10
Une idée de comment je peux me débarrasser des quotes ?
NHenry
Messages postés
15194
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
23 février 2025
353
13 mai 2017 à 21:18
13 mai 2017 à 21:18
Voir mon message, je te donne une bonne piste.
jordane45
Messages postés
38449
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
8 mars 2025
4 739
Modifié le 15 mai 2017 à 01:05
Modifié le 15 mai 2017 à 01:05
Bonjour,
Déjà .. on place le code de connexion à la bdd dans un fichier à part (par exemple : cnxbdd.php ) qu'on aura qu'à inclure lorsqu'on en a besoin.
On en profite pour activer l'affichage des erreurs PDO.
Ensuite,
-on essaye autant que possible de placer le maximum de son code php AVANT le HTML
(Cela le rend plus lisible.. et donc plus maintenable.)
- On récupère proprement les variable via l'écriture ternaire et les isset ou !empty
- On évite d'ouvrir/fermer les balises PHP à tout bout de champ...
- On place ses requêtes dans les blocs Try/catch
- On active l'affichage des erreurs php
- ...etc...
Voila :
Cordialement,
Jordane
Déjà .. on place le code de connexion à la bdd dans un fichier à part (par exemple : cnxbdd.php ) qu'on aura qu'à inclure lorsqu'on en a besoin.
On en profite pour activer l'affichage des erreurs PDO.
<?php //fichier cnxbdd.php try{ $bdd =new PDO('mysql:host=localhost; dbname=MaBase; charset=utf8', 'root', ''); // Activation des erreurs PDO $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); // mode de fetch par défaut : FETCH_ASSOC / FETCH_OBJ / FETCH_BOTH $bdd->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC); } catch(PDOException $e) { die('Erreur : ' . $e->getMessage()); } ?>
Ensuite,
-on essaye autant que possible de placer le maximum de son code php AVANT le HTML
(Cela le rend plus lisible.. et donc plus maintenable.)
- On récupère proprement les variable via l'écriture ternaire et les isset ou !empty
- On évite d'ouvrir/fermer les balises PHP à tout bout de champ...
- On place ses requêtes dans les blocs Try/catch
- On active l'affichage des erreurs php
- ...etc...
Voila :
<?php //Affichage des erreurs PHP error_reporting(E_ALL); ini_set('display-errors','on'); //récupération PROPRE des variables AVANT de les utiliser $ordre = !empty($_POST['ordre']) ? $_POST['ordre'] : NULL; $possesseur = !empty($_POST['possesseur']) ? $_POST['possesseur'] : NULL; $confirm = isset($_POST['confirm']) ? $_POST['confirm'] : NULL; if($confirm){ //préparation de la requête et des variables $sql = "SELECT * FROM jeux_video WHERE possesseur=:possesseur ORDER BY $ordre"; $datas = array(':possesseur'=>$possesseur); //Execution de la requete try{ $requete = $bdd->prepare($sql) ; $requete->execute($datas) ; }catch(Exception $e){ // en cas d'erreur : echo " Erreur ! ".$e->getMessage(); echo " Les datas : " ; print_r($datas); } //on transorme le resultat de la requete en array $a_result = $requete->fetchAll(); $requete->closeCursor(); } ?> <!DOCTYPE html> <html> <head> <meta charset="UTF-8" /> <title>Liste des jeux</title> </head> <body> <div id="main"> <form method="POST" action=""> <strong>Possesseur :</strong> <select name="possesseur"> <option value="Corentin">Corentin</option> <option value="Florent">Florent</option> <option value="Mathieu">Mathieu</option> <option value="Michel">Michel</option> <option value="Patrick">Patrick</option> <option value="Sébastien">Sébastien</option> </select><br /> <strong>Trier par :</strong> <select name="ordre"> <option value="nbre_joueurs_max">Joueurs max.</option> <option value="nom">Nom</option> <option value="possesseur">Possesseur</option> <option value="prix">Prix</option> <option value="console">Support</option> </select> <input type="submit" name="confirm" value="Envoyer" /> </form> <?php //on parcoure l'array pour générer l'affichage. // on évite d'ouvrir/fermer les balises php à tout va.. on fera donc tout en php foreach($a_result as $print){ echo "<p> <strong>Jeu :</strong> ".$print['nom']."<br /> Support : ".$print['console']."<br /> Possesseur : ".$print['possesseur']."<br /> Joueur max. : ".$print['nbre_joueurs_max']."<br /> Prix de vente : ".$print['prix']."<br /> Commentaire de ".$print['possesseur']." :<em>".$print['commentaires']."</em> </p>"; } ?> </div> </body> </html>
Cordialement,
Jordane
nassou01
Messages postés
8
Date d'inscription
dimanche 30 avril 2017
Statut
Membre
Dernière intervention
11 juin 2017
10 juin 2017 à 21:00
10 juin 2017 à 21:00
Il est un peu tard pour ce remerciement, mais tout de même : merci beaucoup !
14 mai 2017 à 00:54
Hum... Pas d'autres moyens en PHP ?