2012-01-30 2 views
0

Je pense que j'ai déjà vu cette question, mais je ne pense pas que la réponse soit déjà assez bonne parce que je n'arrive pas à la faire fonctionner.Comment insérer le caractère "&" dans une base de données MySQL?

Le cas:
Je veux insérer une URL dans ma base de données MySQL comme ceci:

$url = $_POST["url"]; //$_POST["url"] = "http://example.com/?foo=1&bar=2& ..."; 

$sql = mysql_query("INSERT INTO table(url) values('$url')") or die ("Error: " . mysql_error()); 

Maintenant, l'URL est insérée dans la base de données correctement, mais quand je regarde, ça ressemble à ça :

http://example.com/?foo=1 

Il est comme l'URL est coupée juste au caractère "&". J'ai essayé: mysql_real_escape_string, htmlspecialchars, s'échappant en faisant "\" etc. Rien ne semble fonctionner.

J'ai lu que vous pourriez être en mesure de le faire avec "SQL Plus" ou quelque chose comme ça.

Merci d'avance.

Cordialement, VG

+0

Avez-vous essayé de 'echo ($ url)' pour vous assurer que c'est ce que vous attendiez? – jprofitt

+0

par curiosité, avez-vous l'ensemble de données à varchar (25)? –

+0

Pouvez-vous mettre votre définition de table ici? –

Répondre

5

Les chances sont le problème est rien ici à voir avec la requête de base de données, et plus à voir avec la façon dont la L'URL est passée à la page. Je pense que vous trouverez que l'URL utilisée pour charger la page est quelque chose comme:

http://mydomain.com/?url=http://example.com/?foo=1&bar=2 

Cela se traduira par une $_GET qui ressemble à ceci:

array (
    'url' => 'http://example.com/?foo=1', 
    'bar' => '2' 
) 

Qu'est-ce que vous avez besoin est d'appeler la page avec une URL qui ressemble plus à ceci:

http://mydomain.com/?url=http://example.com/?foo=1%26bar=2 

Notez que la & a été encodée à %26.Maintenant$_GET ressemblera à ceci:

array (
    'url' => 'http://example.com/?foo=1&bar=2' 
) 

... et la requête fonctionnera comme prévu.

EDIT Je viens de remarquer que vous utilisez $_POST, mais les mêmes règles s'appliquent au corps de la requête et je pense toujours que c'est votre problème. Si vous êtes, comme je le soupçonne, en utilisant Javascript/AJAX pour appeler la page, vous devez passer la chaîne URL par encodeURIComponent().

+0

Merci pour la réponse rapide. J'ai essayé encodeURIComponent() et ça a marché! –

+0

Et voici le résultat, vous les gars: http://a19.nu/ :) Merci! –

0

Il est probable que le querystring n'est pas passé. Il semble que vous le receviez d'un message FORM. N'oubliez pas que les publications de formulaire qui utilisent une méthode GET ajoutent une chaîne de requête pour transmettre toutes les variables de formulaire, de sorte que toute chaîne de requête dans l'action est généralement ignorée. Donc, la première chose à faire est de renvoyer l'URL avant d'essayer INSERT pour vous assurer que vous obtenez les données que vous pensez être. S'il existe des variables que vous devez transmettre avec l'URL, utilisez des entrées masquées pour cela et une méthode de GET sur l'étiquette de formulaire, et elles seront magiquement ajoutées en tant que paramètres de chaîne query.

-1

peut-être échapper à l'URL avec urlencode alors vous pouvez le décoder si vous voulez tirer hors de la db

0

Droit !! Le problème ici n'a rien à voir avec la requête de base de données a DaveRandom. Utilisez simplement la fonction javascript "encodeURIComponent()".

Questions connexes