J'utilise PHP wrapper personnalisé pour mysqli. La classe est conçue pour utiliser des instructions préparées si les paramètres bind sont passés à la fonction a fetchResultSet sinon, comme je le comprends, elle enregistre un appel à la base de données et utilise la fonction query (peut-être que je ne sais pas enregistrer un appel et le reste de il est possible de répondre à cette question en utilisant simplement des instructions préparées, même sans paramètre à lier).Fusion de données lors de l'utilisation de PHP MySQLi, Functions query et fetch_assoc
Une fois la requête exécutée, une fonction fetchResult renvoie l'un des deux objets ResultSetObjectResult ou ResultSetObjectStmt qui implémente une interface ResultSetObject. (L'objet ResultSetObjectStmt enveloppe un objet stmt pendant que le ResultSetObjectResult enveloppe un objet résultat.)
Les deux classes retournent un tableau associatif lorsqu'une ligne est demandée, en appelant fetch_assoc sur un résultat ou en appelant bind_result sur un objet stmt (fondamentalement). Ce que j'ai remarqué est que si une instruction préparée est exécutée alors les données retournées sont correctement castées en entiers, nombres réels et chaînes selon leurs types dans la base de données; mais quand un résultat est retourné et que fetch_assoc est appelé sur ce résultat, alors toutes les données sont castées en tant que chaînes. Je réalise que cela est mentionné dans la documentation de fetch_assoc. Je suis curieux de savoir s'il y a une autre fonction ou quelque chose que je peux faire pour que mysql jette correctement les résultats.
[EDIT] Je dois mentionner que ceci est seulement un problème car json_encode place les données entre guillemets en fonction de leurs types. J'aime savoir s'il est possible de convertir correctement les données renvoyées d'un résultat sans recourir à des devinettes en utilisant des fonctions comme is_numeric ou en effectuant un appel supplémentaire à la base de données pour le schéma de la table . En utilisant des instructions préparées exclusivement lors de l'extraction de données fonctionne, mais j'aimerais vraiment enregistrer cet appel de préparation supplémentaire à la base de données.
pouvez-vous s'il vous plaît laissez-moi savoir ce que vous avez fait finalement? merci –
Vous n'avez jamais trouvé de solution autre que d'utiliser des instructions préparées lorsque vous saisissez des données qui seront traduites en JSON, ou de lancer les résultats manuellement en utilisant PHP settype. – AWinter