Requête SQL ne fonctionne pas

Fermé
werxetcryvgu Messages postés 3 Date d'inscription mardi 28 janvier 2020 Statut Membre Dernière intervention 28 janvier 2020 - Modifié le 28 janv. 2020 à 11:36
yg_be Messages postés 23361 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 29 novembre 2024 - 28 janv. 2020 à 12:43
Bonjour,
Je code une appli web en local qui fonctionne super bien, mais une fois en ligne, certaine requêtes ne fonctionnent pas:
$sql="INSERT INTO users VALUES ('', '$lname', '$fname', '$email','$password', '$level')";
$query=$DB->prepare($sql);
$res=$query->execute();


Celles-ci fonctionnent par contre:

$req= $DB->query("SELECT id FROM users WHERE email='$email' LIMIT 1");
$user=$req->fetch();



En gros quand j'utilise query() c'est bon mais pas avec prepare() / execute(), d'ailleurs je ne suis pas un pro du code (j'apprend avec les tutos sur le web), je n'ai pas saisi la différence entre ces deux structures et dans quel cas les appliquer.

Merci d'avance pour vos réponses.

2 réponses

yg_be Messages postés 23361 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 29 novembre 2024 Ambassadeur 1 556
Modifié le 28 janv. 2020 à 11:56
bonjour, "ne fonctionnent pas": peux-tu être plus précis?
il est indispensable de détecter et réagir aux erreurs: https://forums.commentcamarche.net/forum/affich-37584941-php-pdo-gerer-les-erreurs
cela t'aidera à comprendre ce qui ne fonctionne pas.

tu peux utiliser query (pour des select) et exec (pour des insert, update et delete).
tu peux aussi utiliser, pour les deux, prepare/execute.

prepare/execute facilite l'insertion de données variables dans les requêtes, comme tu l'auras lu dans l'explication à propos de la gestion des erreurs.
l'utilisation de prepare/execute est plus performant que query ou exec quand tu peux faire un prepare et plusieurs execute.
1
werxetcryvgu Messages postés 3 Date d'inscription mardi 28 janvier 2020 Statut Membre Dernière intervention 28 janvier 2020
Modifié le 28 janv. 2020 à 12:22
Et du coup niveau sécurité c'est quoi la bonne pratique à avoir ?
J'ai vu que dans certains cas on pouvait être sujet à l'injection SQL , j'ai pas trop compris comment ça marche.
0
yg_be Messages postés 23361 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 29 novembre 2024 1 556 > werxetcryvgu Messages postés 3 Date d'inscription mardi 28 janvier 2020 Statut Membre Dernière intervention 28 janvier 2020
28 janv. 2020 à 12:43
l'utilisation de prepare/execute protège contre les injections SQL.
il y a d'autres façons de se protéger, mais c'est plus simple avec prepare/execute.
cela me semble donc une bonne pratique, tout en sachant qu'il faut continuer à se protéger contre d'autres attaques que l'injection SQL
0
werxetcryvgu Messages postés 3 Date d'inscription mardi 28 janvier 2020 Statut Membre Dernière intervention 28 janvier 2020
28 janv. 2020 à 11:54
Ok merci je vais regarder avec la gestion des erreurs.

Pour être plus précis, j'utilise 2 requêtes avec la structure prepare()/execute() dans mon code l'un pour créer un nouvel utilisateur (INSERT) l'autre pour en supprimer un (DELETE).

A part dans ces deux cas, toutes mes requêtes fonctionnent en utilisant query().
0