PHP/MySQL
et la casse

Sensible/Pas sensible

Interaction PHP/MySQL


Sensible/Pas sensible

Si tout n'est pas sensible à la casse dans MySQL il est bon de savoir et se rappeler les choses suivantes pour ceux qui développent. 

1) Les bases sont sensibles à la casse sur un serveur de type Unix et pas sur un serveur de type Windows (cela est OS dépendant à cause du fait que le nom de base correspond à un nom de répertoire). 

2) Les tables sont sensibles à la casse sur un serveur de type Unix et pas sur un serveur de type Windows (cela est OS dépendant à cause du fait que le nom d'une table correspond à des noms de fichiers). 

3) On a donc intérêt, lorsqu'on développe, pour garantir la portabilité de l'application, à considérer les bases et les tables comme sensibles à la casse.

4) Souvent, par commodité, les gens qui maintiennent de nombreuses bases créent un utilisateur MySQL par base et par application qui porte le nom de la base elle-même. Ce n'est pas à conseiller pour des raisons de sécurité. De plus, attention, sur une machine de type Windows, ne pas confondre l'authentification (utilisée pour se connecter) avec l'utilisation de la base elle-même. La première chose est toujours sensible à la casse car cela ne dépend pas de l'OS mais du serveur MySQL.
Exemple : une base Toto est sur un serveur Windows et porte le même nom que l'utilisateur de cette base. Il faudra absolument s'authentifier comme "Toto" mais après un "use ToTo" fonctionnera aussi bien que "use Toto" ou "use TOTO" ou "use toto", ce qui n'est pas le cas sur un serveur Unix/Linux/BSD.

5) Les champs, qui sont insensibles à la casse dans MySQL, quel que soit l'OS qui le supporte, deviennent apparemment sensibles à la casse dès que vous programmez en PHP. En fait ce n'est qu'une apparence que j'explique plus bas. Attention cela n'a rien à voir avec MySQL. Cela est dû au fait que le langage PHP est sensible à la casse pour ses variables. Si vous utilisez un client MySQL natif pour vous connecter à une base MySQL vous vous apercevrez que MySQL se fiche éperdument de la casse des champs.

Interaction PHP/MySQL

Soit, au départ : 

- une première requête qui vous retourne une table que vous parcourez pour accomplir une seconde requête 
- un champ retourné par la première requête qui s'appelle "Machin"
- une variable, tableau de champs, $row, qui reçoit un enregistrement après l'autre

.... alors (exemple 1)...

$DateTempo=$row->Machin sera bon 
alors que 
$DateTempo=$row->machin retournera un truc vide 

Par contre (exemple 2), à un autre endroit du programme, ...

$query="select Machin from bidule"; 
mysql_query($query); 

... fonctionne aussi bien que...

$query="select machin from bidule"; 
mysql_query($query); 

Dans l'exemple 1, "Machin" est un élément de variable php que php a construit à partir du champ retourné par MySQL. On ne peut donc l'utiliser qu'en respectant la casse. 

Dans l'exemple 2, "Machin" est un champ MySQL dans une chaîne de caractères PHP qui va être utilisée telle que pour être envoyée à MySQL et qui sera interprétée par MySQL. La casse du champ n'a donc pas d'importance.


E. Durup - 10/04/2002