8
votes

Puis-je utiliser la fonction dbd :: mySQL citation () sans connexion de base de données?

J'écris un fichier .sql à l'aide de Perl, n'écrivez pas directement à la base de données MySQL. Je dois citer les chaînes dans ce fichier. On dirait que la méthode $ DBH-ciote () fait ce que je veux. Sauf que je ne peux pas comprendre comment l'utiliser sans connexion de base de données. Je ferais une connexion factice, mais je n'arrive pas à le faire sans une base de données et la machine qui va courir ce travail de cron n'en aura pas.

Cette question est similaire: Perl DBI sans accéder à la base de données et le La réponse acceptée stipule que "Vous pourriez essayer de charger le pilote dont vous avez besoin et d'appeler la fonction directement", ce que je voudrais faire, mais je ne peux pas comprendre comment faire ça.


1 commentaires

3 Réponses :


3
votes

On dirait que vous allez devoir déterminer ce que ciote fait et mettez-le vous-même. Ne pas avoir accès à une vraie connexion de base de données sera probablement un shopper.


0 commentaires

4
votes

Citation fiable nécessite que le conducteur comprenne le jeu de caractères / la classement de la connexion en tant qu'écapacité varie en fonction de ces informations.

C'est pourquoi, dans php mysql_escapape_string () a été remplacé par mysql_real_escape_string (), qui utilise les propriétés de connexion de base de données pour échapper correctement aux chaînes d'entrée.


1 commentaires

Mon ensemble de caractères est UTF-8 et ma collation est UTF8_BIN. J'ai toujours besoin d'échapper sans connexion de base de données. Une connexion factice peut-elle être créée avec ces informations?



0
votes

On dirait que la réponse est un retentissant "Vous ne pouvez pas le faire". En tout cas voici une fonction de devis que j'ai fouillée conformément à la documentation MySQL http://dev.mysql.com/doc/refman/5.0/fr/string-literals.html sur ce qui doit être cité.

Mon entrée est UTF-8, Perl Stocke Strings dans UTF-8 en interne, ma sortie est UTF-8 et ma base de données est UTF-8. Étant donné que le jeu de caractères est cohérent, je ne devrais pas avoir besoin de m'inquiéter beaucoup à ce sujet à des fins d'échappement. xxx

J'ai testé cette fonction et il semble faire ce que je veux . Dommage que ce soit comme ça n'est pas accessible à partir d'une bibliothèque où il est déjà écrit.


4 commentaires

Je ne comprends pas pourquoi vous devez échapper à quelque chose, sauf si vous avez l'intention de l'exécuter sur la base de données. Si vous souhaitez l'exécuter sur la base de données, pourquoi ne pouvez-vous pas avoir une connexion de base de données établie avant de vous échapper, puisque vous voulez l'exécuter quand même?


Le fichier est copié hors de la machine de production pour être importé dans une base de données de backend.


Alors, échappez-le lorsque vous l'importerez :) [Je suppose que vous n'avez pas de pouvoir sur le processus d'importation?]


Le processus d'importation est le suivant: "Cat File.SQL | MySQL". Pour échapper à cette fin, j'aurais besoin d'écrire un code supplémentaire et d'utiliser un format d'échange de données entre ceux de type CSV qui aurait ses propres règles d'échappement. Je conviens que l'écriture de votre propre fonction d'échappement est stupide et sujette à introduire des bugs. Je souhaite qu'il y ait un moyen facile d'accéder à cette méthode de la bibliothèque largement utilisée.