Précédent   Forum des professionnels en informatique > Bases de données > Langage SQL
Langage SQL Forum d'entraide sur le langage SQL et sur les questions liées à la conception de schéma (DDL). Cours SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 24/06/2011, 17h15   #1
Invité de passage
 
Inscription : juin 2011
Messages : 3
Détails du profil
Informations forums :
Inscription : juin 2011
Messages : 3
Points : 0
Points : 0
Par défaut id et requête sql

Bonjour,
mon problème est simple et je suis un peu perdu.
voila, lorsque je réalise une requête comme celle-ci :

Code :
SELECT `user`.* FROM `user` WHERE (user_id = '3azeazeaz')
user_id étant un entier
il me renvoie tout de même les données correspondant à l'id '3'
comment cela se fait il ?
comment puis je empêcher cela ?

merci d'avance.
mathiasduc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/06/2011, 17h24   #2
Membre émérite
 
Homme Olivier Dehorter
Ingenieur de recherche - Ecologue
Inscription : juin 2003
Messages : 697
Détails du profil
Informations personnelles :
Nom : Homme Olivier Dehorter
Localisation : France

Informations professionnelles :
Activité : Ingenieur de recherche - Ecologue

Informations forums :
Inscription : juin 2003
Messages : 697
Points : 837
Points : 837


Si 'user_id' est un entier, qu'est ce que c'est que cette valeur [3azeazeaz] (qui est indiquée comme un alphanumérique) ????


Cela ne devrait pas fonctionner du tout ?

quel est le SGBD ?
dehorter olivier est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/06/2011, 17h28   #3
Invité de passage
 
Inscription : juin 2011
Messages : 3
Détails du profil
Informations forums :
Inscription : juin 2011
Messages : 3
Points : 0
Points : 0
le sgbd est phpmyadmin
mais, justement c'est cela qui est etrange, cette requete me renvoie tout de même les données qui y sont lié
mathiasduc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/06/2011, 17h30   #4
Membre émérite
 
Homme Olivier Dehorter
Ingenieur de recherche - Ecologue
Inscription : juin 2003
Messages : 697
Détails du profil
Informations personnelles :
Nom : Homme Olivier Dehorter
Localisation : France

Informations professionnelles :
Activité : Ingenieur de recherche - Ecologue

Informations forums :
Inscription : juin 2003
Messages : 697
Points : 837
Points : 837
Je ne sais pas quoi dire
dehorter olivier est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 24/06/2011, 17h32   #5
Invité de passage
 
Inscription : juin 2011
Messages : 3
Détails du profil
Informations forums :
Inscription : juin 2011
Messages : 3
Points : 0
Points : 0
est ce que le fait que ça soit avec innodb joue un rôle ?
je ferai un test.
merci tout de même !
mathiasduc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/06/2011, 18h10   #6
Membre Expert
 
Inscription : août 2008
Messages : 1 271
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 1 271
Points : 1 929
Points : 1 929
Le SGBD est MySql et pas phpmyadmin
Si user_id est un entier il ne faut pas utiliser les '', sinon tu forces le SGBD à faire une conversion implicite.
Et comme MySql n'est pas du genre à renvoyer des erreurs peut être qu'il s'accomode dans la conversion pour renvoyer 3, simple supposition...
Qu'est ce que ça donne avec 'azea3zeaz'
skuatamad est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 25/06/2011, 22h04   #7
Membre Expert
 
Inscription : août 2008
Messages : 1 271
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 1 271
Points : 1 929
Points : 1 929
Je reproduis bien ton problème, par contre il y a un warnings :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
mysql> CREATE TABLE t (i int);
Query OK, 0 rows affected (0.08 sec)
 
mysql> INSERT INTO t VALUES (3);
Query OK, 1 row affected (0.00 sec)
 
mysql> SELECT * FROM t WHERE i = '3azeazeaz';
+------+
| i    |
+------+
|    3 |
+------+
1 row IN SET, 1 warning (0.00 sec)
 
mysql> SHOW warnings;
+---------+------+-----------------------------------------------+
| Level   | Code | Message                                       |
+---------+------+-----------------------------------------------+
| Warning | 1292 | Truncated incorrect DOUBLE value: '3azeazeaz' |
+---------+------+-----------------------------------------------+
1 row IN SET (0.00 sec)
Et sans quotes évidemment pas de problème :
Code :
1
2
3
4
5
6
7
8
9
10
mysql> SELECT * FROM t WHERE i = 3;
+------+
| i    |
+------+
|    3 |
+------+
1 row IN SET (0.00 sec)
 
mysql> SELECT * FROM t WHERE i = 3azeazeaz;
ERROR 1054 (42S22): Unknown COLUMN '3azeazeaz' IN 'where clause'
Je pensais qu'un strict mode pouvait améliorer la situation, mais je n'ai pas trouvé, par contre j'ai trouvé ce bug report (pas trop vieux), qui n'est probablement pas considéré comme un bug, mais qui ressemble à ton cas et laisse supposer qu'aucun strict mode ne convient :
SELECT 0 in ('a','b') returns TRUE
Donc moi j'ai laissé tomber ma recherche...

[ANNEXE]Par contre j'ai trouvé ONLY_FULL_GROUP_BY qui me plait beaucoup
skuatamad est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 01h55.


 
 
 
 
Partenaires

Hébergement Web