[MYSQL] Clause WHERE foireuse ?

Clause WHERE foireuse ? [MYSQL] - SQL/NoSQL - Programmation

Marsh Posté le 27-06-2008 à 09:35:49    

Code :
  1. SELECT `blabla` FROM `boop` WHERE `id`='1sdq'


id est un int(11) index auto_increment
Dans la table boop, il y a une seul enregistrement id=1
 
Pourquoi cette requête me sort cet élément ?

Reply

Marsh Posté le 27-06-2008 à 09:35:49   

Reply

Marsh Posté le 27-06-2008 à 10:18:25    

Conversion string -> entier je pense [:figti]  

mysql> select '1toto' + 2;
+-------------+
| '1toto' + 2 |
+-------------+
|           3 |
+-------------+
1 row in set, 1 warning (0.00 sec)

Reply

Marsh Posté le 27-06-2008 à 11:20:39    

Code :
  1. SELECT `blabla` FROM `boop` WHERE `id` = CAST('1qs' AS CHAR)


Ca me retourne toujours quelque chose, pourtant CAST('1qs' AS CHAR) = 1qs
 
Même chose avec "AS SIGNED" et "AS UNSIGNED"

Reply

Marsh Posté le 27-06-2008 à 11:57:57    

normal, ton cast ne modifie en rien la comparaison qui est faite.  
 
Que tu castes ta chaine en char, en canard ou en poule, elle sera ensuite castée en int pour la comparer avec id qui est un int.
 
Il faudrait plutot caster le contenu de id, ou passer par une fonction de comparaison de chaines de caractères entre id et ta chaine 1qs, pour obtenir le comportement que tu souhaites.

Reply

Marsh Posté le 01-07-2008 à 18:54:33    

:heink:
 
C'est chelou MySQL quand même...
 
Normalement, un SGBD doit tenter de suivre les règles de cast implicite habituelles, c'est à dire caster du type le plus permissif vers le type le moins permissif.
 
En gros, tu devrais avoir une erreur car il n'arrive pas à caster la chaîne en entier :heink:

Reply

Marsh Posté le 01-07-2008 à 19:46:02    

j'ai renoncé [:spamafote]
vu que l'élément de recherche vient d'un GET, je me suis débrouillé pour que ce ne soit qu'un entier, comme ça, plus de problème

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed