Récupération de la requête SQL brute à partir des instructions préparées PDO
Dans le contexte des instructions préparées, le concept de « chaîne de requête SQL brute » n'est pas simple. Lorsque PDOStatement::execute() est invoqué sur une instruction préparée, l'instruction SQL qui est exécutée est distincte de l'instruction préparée elle-même.
L'accès à la requête SQL finale, interpolée avec les valeurs des paramètres, n'est pas un processus simple. inhérents aux déclarations préparées. Les paramètres ne sont pas consolidés avec l'instruction préparée côté client, ce qui la rend inaccessible à PDO.
L'instruction SQL est envoyée au serveur de base de données lors de l'opération prepare(), tandis que les paramètres sont transmis séparément lors de l'exécution( ) est appelé. MySQL maintient un journal de requêtes général qui révèle le SQL final avec les valeurs intégrées après l'exécution (). Cependant, ce journal est externe à PDO et ne représente pas la chaîne de requête « brute ».
Une solution de contournement consiste à définir l'attribut PDO PDO::ATTR_EMULATE_PREPARES. Dans ce mode, PDO interpole les paramètres dans la requête SQL avant de l'exécuter. Cependant, cette méthode compromet l'efficacité des instructions préparées.
La propriété $queryString de l'objet PDOStatement peut sembler une solution potentielle, mais elle n'est définie que lors de l'initialisation de l'objet et ne reflète pas l'interpolation des paramètres. Exposer la requête réécrite en tant que fonctionnalité serait bénéfique, mais cela ne remplirait toujours pas les exigences à moins que PDO::ATTR_EMULATE_PREPARES ne soit utilisé.
L'utilisation du journal de requêtes général d'un serveur MySQL fournit une solution de contournement car il enregistre la requête réécrite. Néanmoins, cela ne s'applique que lors de la journalisation, pas lors de l'exécution de la requête.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!