Étant donné le tableau :
CREATE TABLE IF NOT EXISTS `users` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`name` varchar(100) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
Ajoutez quelques rangs :
INSERT INTO `users` (`id`,`name`) VALUES (NULL , 'Bob'),(NULL , 'Larry'),(NULL , 'Steve');
Pourquoi, OH WHY ! cette requête renvoie des résultats :
SELECT * FROM `users` WHERE id = "2this-is-not a numeric value"
Résultat :
query returned 1 row(s) in 0.0003 sec
id name
-----------------
2 Larry
La chaîne de caractères utilisée dans la clause where est clairement convertie en valeur numérique -- qui a dit de faire cela ? ! Je ne trouve aucune documentation suggérant que mysql ou PHP ait la prétention de convertir automatiquement ma chaîne littérale.
Cela ne fonctionne que si le caractère numérique est le premier de la chaîne, "this 2 is not numeric"
ne renvoie pas de résultats. "12 2"
deviendrait 12
, "1 2"
(un-espace-deux) devient 1
.
Tout article ou documentation expliquant ce comportement serait apprécié.