PHP sait formater un flottant en fonction de la locale (catégorie LC_NUMERIC) :
setlocale(LC_NUMERIC, NULL); echo 3.14;
Affichera 3,14 (pour une locale française)
Par contre, gare à l'ensemble des casts, même implicites, de float vers string (penser au SQL) car le point de la partie décimale sera modifié. Plus grave, de cette particularité :
L'information locale est maintenue par processus, non par thread. Si vous faites fonctionner PHP sur un serveur multi-threadé comme IIS ou Apache sur Windows, vous pourriez obtenir des changements soudains des configurations locales pendant qu'un script fonctionne, même si celui-ci n'appelle jamais la fonction setlocale(). Ceci survient à cause des autres scripts qui fonctionnent dans des threads différents du même processus. Ces scripts changent les configurations locales dans le processus au complet en utilisant la fonction setlocale().
La documentation est imprécise, une valeur NULL comme '' (chaîne vide) sous Windows la modifie pour celle du système. La valeur correcte est bien '0' :
var_dump(setlocale(LC_NUMERIC, '0'));
Déplacé, mis à jour et développé sur http://www.julp.fr/blog/posts/13-pdo-et-mysql-limiter-les-degats-en-cas-d-injection-sql