CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

différence entre deux requêtes sql

boss_power
boss_power
Niveau 6
14 septembre 2015 à 03:09:51

Bonjour,

En fait, suite au topic dont j'ai fais tantôt, une autre petite question me vient a la tete. En effet, pourquoi je vois parfois des requêtes sql de ce genre : (SELECT * FROM users WHERE username='$username' AND password='$password')

et dans d'autres cas je vois des requetes de ce type: ('SELECT * FROM users WHERE username=\.$username.'\' AND password=\.$password.'\'')

C'est quoi la différence entre ces deux requêtes.

Merci de vos réponses

boss_power
boss_power
Niveau 6
14 septembre 2015 à 04:02:25

Sur le net on me dit que la première c'est mysql tandis que la deuxième c'est PDO mais je ne suis pas vraiment sur, quelqu'un peut me confirmer?

Bunyan
Bunyan
Niveau 17
14 septembre 2015 à 09:58:30

De mémoire, les simples quote ( ' ) interprètent les variables.
Partant de là, les deux seraient similaires, juste que la construction est plus explicite dans le second cas.

Ps : penser à passer aux requêtes préparées qui évitent les injections SQL.

Chocolayte
Chocolayte
Niveau 73
14 septembre 2015 à 11:27:16

Les deux sont fausses en fait.
La première n'est pas entourée de guillemets (donc ce n'est pas considéré comme une chaine de caractères et ça va te créer une erreur).
La seconde insère mal les variables autour des variables php.

Voilà trois manières de procéder :


$username = "user";
$password = "pwd";

$query = "SELECT * FROM users WHERE username='$username' AND password='$password'";
echo $query;
$query = "SELECT * FROM users WHERE username='".$username."' AND password='".$password."'";
echo $query;
$query = 'SELECT * FROM users WHERE username=\''.$username.'\' AND password='\'.$password.'\'';
echo $query;

/* Resultat
 * SELECT * FROM users WHERE username='user' AND password='pwd'
 * SELECT * FROM users WHERE username='user' AND password='pwd'
 * SELECT * FROM users WHERE username='user' AND password='pwd'
 */ 

// Exemple d'utilisation
$query = "SELECT * FROM users WHERE username='$username' AND password='$password'";
$reponse = $bdd->query($query);

Pour ce que tu nommes mysql et PDO, ce sont des "fonctions" que tu utilises pour exécuter les requêtes. Elles n'influent pas sur la syntaxe de la requête SQL. Tu utilisais PDO dans ton code source d'hier (et c'est bien).

boss_power
boss_power
Niveau 6
14 septembre 2015 à 11:30:38

Mais est ce vrai que la seconde protégé contre les injections sql?

Bunyan
Bunyan
Niveau 17
14 septembre 2015 à 11:54:00

Merci Chocolayte pour la rectification :)

Et de ce que je vois des sorties : non, aucune n'est protégée contre une injection SQL. Voir ma remarque sur les requêtes préparées.

Chocolayte
Chocolayte
Niveau 73
14 septembre 2015 à 12:24:31

Je l'ignorais, pour les injections, merci pour l'info. J'avais toujours considéré prepare() comme inutiles. :noel:

Message édité le 14 septembre 2015 à 12:25:44 par Chocolayte
boss_power
boss_power
Niveau 6
14 septembre 2015 à 13:00:15

Mais pourquoi quand j'utilisé la première requête que Chocolayte à montré, ça me dit qu'il y a un problème de quote

boss_power
boss_power
Niveau 6
14 septembre 2015 à 13:14:39

Celle du 'SELECT * FROM user WHERE username='$username' AND password='$password''

Candystand
Candystand
Niveau 10
14 septembre 2015 à 18:05:22

Tu commences par un simple quote et finis pas un double, du coup commence par un double quote :)

TheRealMarco
TheRealMarco
Niveau 13
14 septembre 2015 à 18:13:17

Le 14 septembre 2015 à 18:05:22 Candystand a écrit :
Tu commences par un simple quote et finis pas un double, du coup commence par un double quote :)

Il finit par deux simples quotes (une finit pour la variable password, et une pour la requête entière). Pour encadrer toute ta requête, privilégie l'utilisation des doubles quotes. Il me semble que PHP va interpreter de la première quote à la suivante. Pour l'ordinateur ta "phrase" est : "SELECT * FROM user WHERE username=" car après, il retrouve le caractère avec lequel tu as commencé l'instruction. :ok:

Chocolayte
Chocolayte
Niveau 73
14 septembre 2015 à 18:20:00

Faut faire attention aux simples guillemets et aux doubles, le comportement n'est pas le même. C'est pour ça que je t'ai montré trois exemples différents (qui fonctionnent tous, si tu les recopies correctement). =)

godrik
godrik
Niveau 30
14 septembre 2015 à 18:53:45

Et surtout, prepared statement bowdel!

Bunyan
Bunyan
Niveau 17
14 septembre 2015 à 19:47:59

+1
Bien utilisée, bien entendu.

papy386
papy386
Niveau 10
15 septembre 2015 à 02:21:40

Je dirais que celle avec des \" c'est du sql dans du C/C++ voir C#.

Sous forums
  • Aide à l'achat Mac
  • Macintosh
  • Création de sites web
  • Création de Jeux
  • Linux
  • Programmation
  • Internet
  • Steam Deck
  • Hardware
La vidéo du moment