Requête SQL ne fonctionne pas

werxetcryvgu Messages postés 3 Date d'inscription   Statut Membre Dernière intervention   -  
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   -
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 23541 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 584
 
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   Statut Membre Dernière intervention  
 
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 23541 Date d'inscription   Statut Contributeur Dernière intervention   1 584 > werxetcryvgu Messages postés 3 Date d'inscription   Statut Membre Dernière intervention  
 
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   Statut Membre Dernière intervention  
 
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