-
Mysql et serialize
Bonsoir,
Je suis sur le point de commencer un nouveau site et je me posais une question. Le site en question doit contenir une base de données assez 'béton' en mysql, et j'ai peur de m'embrouiller très vite entre les noms de mes champs, aussi bien dans la bdd que dans mon code php. J'ai vu qu'il y'avait moyen de transformer une instance de classe en chaine de caractères grâce a la fonction serialize. Cela me simplifierais énormément la vie car dans ce cas je n'ai plus qu'à créer 2 champs pour chaque table de ma base de données: une clé id primaire et un champs 'value' de type text (voir longtext) qui contient le serialize de mon instance. De plus je n'ai qu'à faire un unserialize par la suite pour récupérer mon objet et utiliser par la suite les fonctions membre etc... Seulement je vois que cette technique n'est pas très répandu. Possède t-elle une faille au niveau de la sécurisation des données, des performances, ou autre ? Au niveau de la clareté de la base de données (si par exemple je dois y accéder par phpmyadmin) j'avoue que c'est pas top, mais normalement je suis censé pouvoir modifier toutes les infos à partir du site en lui-même donc ça pose pas de problème. Merci d'avance pour vos réponse.
-
ça ne me parait pas terrible car on ne peut pas faire de where sur tes champs vu qu'ils sont serializé. Tout dépend ce que tu veux vraiment stocké dans ta base et comment tu dois lire les données.
Un exemple tout bete :
Code:
SELECT MONCHAMP1 FROM MATABLE ORDER BY MONCHAMP1 ASC
Je sélectionne un champ et je tri sur ce champ...
C'est assez compliqué à faire dans le cas ou MONCHAMP1 est sérialisé dans un champ value.
-
Ouai... c'est vrai que j'avais pas pensé à ça, ça devient assez galère si on veut filtrer les entrées ou bien les trier. Il y a des fonctions pour ça en php mais elle sont plus dur à manipuler, ça peut devenir assez casse-tête...
-
En général, on essai de faire le maximum de traitement sur la requete car c'est bien plus rapide qu'un traitement php. Ton idée peut très bien marché mais il va te falloir pas mal de fonction qu'il te faudra développer et si tu pars sur un gros volume, les performances vont se dégrader très très vite !
-
Un petit ajout sur ce message car il pourrait induire en erreur bon nombre d'entre nous.
Bien sûr que l'on peut faire un WHERE sur un champ serializé.
Toutefois, rien ne vaut une bonne base de données dans la plupart des cas.