Posts Tagged ‘transtypage’

Quand je force un tableau associatif en objet, il devient un objet ayant les propriétés qui étaient les clefs du tableau.

Quand je caste un objet en tableau, le nom des propriétés deviennent des clés du tableau, prenant leur valeur.

Publicités

Durant une formation, on s’est retrouvé face à une particularité assez fine de MySQL, alors qu’on cherchait à tester PDO en PHP.

Voici la requête préparée qu’on avait mise au point :

SELECT nom, prenom
FROM auteur
WHERE nom = ?;

En lieu et place du nom, nous avons voulu insérer un zéro

Cela donnait donc

SELECT nom, prenom
FROM auteur
WHERE nom = 0;

En ce cas, MySQL transtype tous les noms de champs en entier, de la même manière que PHP, à savoir :
‘abc’ donne 0
‘3 euros’ donne 3

Dans cette requête, le WHERE comporte une égalité, donc MySQL transtype les membres de l’égalité pour la réaliser. Il transtype donc le champ nom en entier, et notre requête devient :

SELECT nom, prenom
FROM auteur
WHERE 0 = 0;

Mais ce qui est encore plus fort, c’est d’utiliser FALSE. Le SQL comprend FALSE comme valeur, mais lors d’une requête, le même transtypage, évoqué ci-dessus, s’opère et FALSE devient 0 en tant qu’entier.

Donc la requête

SELECT nom, prenom
FROM auteur
WHERE nom = FALSE;

renvoie les mêmes résultats que celle déjà citée avec le WHERE 0=0

Etonnant, non ?