Puisque le lien fourni par stillbsd nous dit qu'il suffit de backslasher,
dans l'esprit de la fonction mysql quote, il y a des choses possibles en Perl mais
pour rester en Bourne Shell, je te propose cet exemple :
--> Tu peux construire ta requête, la mettre dans un fichier temporaire.sql et le faire exécuter par myqsl
Extrait du man : You can execute SQL statements in a script file (batch file) like this:
shell> mysql db_name < script.sql > output.tab
Ah! Il reste un "cas pourri" : si tu dois filtrer aussi les "...
sh-3.1$ filename="Don't do it"
sh-3.1$ path=' "pourri des hanetons" '
sh-3.1$ checksum=1789
sh-3.1$ formatted_date='28 aout 1664'
sh-3.1$ sed -e "s/'/\\\'/g" -e 's/"/\\\"/g' <<UNE_SEQUENCE_DE_CARACTERES_QUI_TERMINE_L_ENTREE_ASYNCHRONE
> INSERT INTO p_photos (p_filename,p_path,p_checksum,p_exifdate) VALUES (\\'${filename}\\',\\'${path}\\',\\'${checksum}\\',\\'${formatted_date}\\')
> UNE_SEQUENCE_DE_CARACTERES_QUI_TERMINE_L_ENTREE_ASYNCHRONE INSERT INTO p_photos (p_filename,p_path,p_checksum,p_exifdate) VALUES (\\'Don\'t do it\\',\\' \"pourri des hanetons\" \\',\\'1789\\',\\'28 aout 1664\\') sh-3.1$
...Ca c'est facilement extensible à d'autres cas...
Voili, voilà... Bon courage pour la suite, teste tout les cas pourris, surtout si ça doit aller en production ensuite, et plus encore si c'est exposé au Web...
[^] # Re: quote ?
Posté par tguez . En réponse au message Mysql : insertion de simple quotes depuis bash. Évalué à 1.
Puisque le lien fourni par stillbsd nous dit qu'il suffit de backslasher,
dans l'esprit de la fonction mysql quote, il y a des choses possibles en Perl mais
pour rester en Bourne Shell, je te propose cet exemple :
filename="Don't, don't worry...";echo $filename;echo "${filename}"|sed "s/'/\\\'/g" >/tmp/taztoo;cat /tmp/taztoo
Don't, don't worry...
Don\'t, don\'t worry..
--> Tu peux construire ta requête, la mettre dans un fichier temporaire.sql et le faire exécuter par myqsl
Extrait du man :
You can execute SQL statements in a script file (batch file) like this:
shell> mysql db_name < script.sql > output.tab
Ah! Il reste un "cas pourri" : si tu dois filtrer aussi les "...
sh-3.1$ filename="Don't do it"
sh-3.1$ path=' "pourri des hanetons" '
sh-3.1$ checksum=1789
sh-3.1$ formatted_date='28 aout 1664'
sh-3.1$ sed -e "s/'/\\\'/g" -e 's/"/\\\"/g' <<UNE_SEQUENCE_DE_CARACTERES_QUI_TERMINE_L_ENTREE_ASYNCHRONE
> INSERT INTO p_photos (p_filename,p_path,p_checksum,p_exifdate) VALUES (\\'${filename}\\',\\'${path}\\',\\'${checksum}\\',\\'${formatted_date}\\')
> UNE_SEQUENCE_DE_CARACTERES_QUI_TERMINE_L_ENTREE_ASYNCHRONE
INSERT INTO p_photos (p_filename,p_path,p_checksum,p_exifdate) VALUES (\\'Don\'t do it\\',\\' \"pourri des hanetons\" \\',\\'1789\\',\\'28 aout 1664\\')
sh-3.1$
...Ca c'est facilement extensible à d'autres cas...
Voili, voilà... Bon courage pour la suite, teste tout les cas pourris, surtout si ça doit aller en production ensuite, et plus encore si c'est exposé au Web...
Qui dit mieux ?