Ceci est une question vraiment ancienne, mais il existe une autre façon de le faire qui peut ou non être plus sûr, selon votre point de vue. Il nécessite MySQL 5.6 ou plus tard en raison de l'utilisation d'une fonction de chaîne spécifique: FROM_BASE64
.
Disons que vous avez ce message que vous souhaitez insérer:....
« Ah, » Presque Headless Nick fit signe une main élégante, « une question sans importance Il est pas comme si je vraiment Je voulais m'inscrire ... Je pensais appliquer, mais apparemment je ne réponds pas aux exigences - "
Cette citation a un tas de guillemets simples et doubles et serait une vraie douleur à insérer en MySQL. Si vous insérez cela depuis un programme, il est facile d'échapper les guillemets, etc. Mais, si vous devez mettre cela dans un script SQL, vous devrez éditer le texte (pour échapper les guillemets) qui pourrait être source d'erreur ou sensible au mot-emballage, etc.
Au lieu de cela, vous pouvez base64 encode le texte, de sorte que vous avez une chaîne "propre":
SWtGb0xDSWdUbVZoY214NUlFaGxZV1JzWlhOeklFNXBZMnNnZD JGMlpXUWdZVzRnWld4bFoyRnVkQ0JvWVc1a0xDQWlZU0J0WVhS MFpYCklnYjJZZ2JtOGdhVzF3YjNKMFlXNWpaUzRnTGlBdUlDNG dTWFFuY3lCdWIzUWdZWE1nZEdodmRXZG9JRWtnY21WaGJHeDVJ SGRoYm5SbApaQ0IwYnlCcWIybHVMaUF1SUM0Z0xpQlVhRzkxWj JoMElFa25aQ0JoY0hCc2VTd2dZblYwSUdGd2NHRnlaVzUwYkhr Z1NTQW5aRzl1SjMKUWdablZzWm1sc2JDQnlaWEYxYVhKbGJXVn VkSE1uSUMwaUlBPT0K
Quelques notes sur base64-Encoding:
- base64-encodage est un codage binaire, donc vous feriez mieux de vous assurer que vous obtenez votre jeu de caractères correct lorsque vous faites l'encodage, car MySQL va décoder la chaîne encodée en base64 en octets, puis interpréter ceux-ci. Assurez-vous que
base64
et MySQL sont d'accord sur l'encodage des caractères (je recommande UTF-8).
- J'ai enveloppé la chaîne à 50 colonnes pour la lisibilité sur SO. Vous pouvez l'enrouler à n'importe quel nombre de colonnes que vous voulez (ou ne pas envelopper du tout) et cela fonctionnera toujours.
Maintenant, pour charger ce dans MySQL:
INSERT INTO my_table (text) VALUES (FROM_BASE64(' SWtGb0xDSWdUbVZoY214NUlFaGxZV1JzWlhOeklFNXBZMnNnZD JGMlpXUWdZVzRnWld4bFoyRnVkQ0JvWVc1a0xDQWlZU0J0WVhS MFpYCklnYjJZZ2JtOGdhVzF3YjNKMFlXNWpaUzRnTGlBdUlDNG dTWFFuY3lCdWIzUWdZWE1nZEdodmRXZG9JRWtnY21WaGJHeDVJ SGRoYm5SbApaQ0IwYnlCcWIybHVMaUF1SUM0Z0xpQlVhRzkxWj JoMElFa25aQ0JoY0hCc2VTd2dZblYwSUdGd2NHRnlaVzUwYkhr Z1NTQW5aRzl1SjMKUWdablZzWm1sc2JDQnlaWEYxYVhKbGJXVn VkSE1uSUMwaUlBPT0K '));
Cela insérera sans aucune plainte, et vous ne pas avoir à manuellement échapper à tout texte contenu dans la chaîne.
Vous voudrez peut-être mettre à jour votre message pour inclure mysql_real_escape_string() ou addslashes() comme solutions possibles ... comme dans l'un des commentaires ci-dessous, l'OP indique qu'il ne fait que lire le fichier et l'insérer. –
Les méthodes mysql_ * ne sont pas recommandées pour une utilisation future, car elles sont [obsolète] (https://wiki.php.net/rfc/mysql_deprecation). – hd1
C'est la bonne réponse, même si ces jours-ci la meilleure option est d'utiliser l'un des – Ryan