7 votes

La mise à jour de l'ORM de FuelPHP produit sporadiquement " au lieu de ".

J'utilise PHP 5.4.4 et j'obtiens un comportement très étrange avec les fonctions de sauvegarde et de mise à jour de FuelPHP ORM.

J'essaie d'enregistrer des données sérialisées ou JSON dans un champ de la base de données, ce qui donne quelque chose du genre {"name":"michael"} . Lorsque j'utilise le model->save() directement après Model::forge() Cela semble fonctionner correctement dans 100% des cas et la chaîne que vous voyez est celle qui est stockée dans la base de données MySQL.

Cependant, si je modifie immédiatement quelque chose comme model->property = 'new property' (pas la propriété JSON ou les données sérialisées) et que je fais ensuite un autre model->save() Dans 90 % des cas, il transformera toutes mes " en &quot ;

Il semble que lorsque je débogue le problème et que je le parcours ligne par ligne, le problème ne se reproduit pas ! Il peut parcourir l'intégralité du script et avoir toujours le bon résultat. " au lieu de &quot ;

Ce problème me rend fou. Je suppose que c'est un problème de configuration, sinon il y aurait beaucoup plus de plaintes, mais je n'arrive pas à trouver le bon interrupteur. J'ai réglé les deux php_flag magic_quotes_gpc Off y php_flag magic_quotes_runtime Off dans mon .htaccess (bien qu'il ne devrait pas être nécessaire en PHP 5.4+) et vérifié que les deux sont faux.

Je suis à court d'idées. Tout ce qui peut servir de piste de recherche serait vraiment utile.

3voto

atorres757 Points 141

Votre ORM utilise peut-être une sorte de fonction d'échappement pour enregistrer votre chaîne json. Il s'agit d'une fonction de sécurité destinée à prévenir les attaques par injection sql. Utilisez une solution noSql comme MongoDB ou CouchDB si vous avez besoin de stocker du json. Sinon, vous devrez nettoyer vos chaînes json après leur sortie de mysql et avant de les décoder.

http://dev.mysql.com/doc/refman/5.0/en/string-literals.html

0voto

RecentCoin Points 47

Essayez d'ajouter des instructions "echo" pour imprimer vos variables afin de pouvoir déterminer où cela se produit. Cela permet généralement de comprendre pourquoi.

Vous pouvez également essayer d'ajouter quelque chose comme double_encode pour les entités html afin de l'empêcher de les encoder.

0voto

user1635914 Points 125

Si les " sont convertis en " dans la base de données, ce n'est pas un problème. C'est pour la sécurité. Si vous rendez la sortie sur le navigateur, elle apparaîtra à nouveau comme ".

Et si c'est votre navigateur qui affiche " as ", alors vous devez décoder la valeur avant d'imprimer.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X