2012-01-30 4 views
0

Я думаю, что я видел этот вопрос раньше, но я не думаю, что он ответил достаточно хорошо, потому что я не могу заставить его работать.Как вставить символ «&» в базу данных MySQL?

Корпус:
Я хочу, чтобы вставить URL в моей базе данных MySQL, как так:

$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()); 

Теперь URL вставляется в базу данных правильно, но когда я смотрю на нее, она выглядит следующим образом :

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

Это как URL режут прямо на "&" характер. Я пробовал: mysql_real_escape_string, htmlspecialchars, ускользнув, делая "\" и т. Д. Ничто не работает.

Я прочитал, что вы можете сделать это с помощью «SQL Plus» или что-то в этом роде.

Заранее спасибо.

С уважением, В. Г.

+0

Вы пытались «эхо ($ url)», чтобы убедиться, что это то, что вы ожидаете? – jprofitt

+0

из любопытства, есть ли у вас данные, установленные для varchar (25)? –

+0

Можете ли вы поместить здесь свое определение таблицы? –

ответ

5

Скорее всего, проблема здесь не имеет ничего общего с запросом к базе данных, и больше, чтобы сделать с тем, как url передается на страницу. Я подозреваю, вы увидите, что URL, используемый для загрузки страницы что-то вроде:

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

Это приведет к $_GET, который выглядит следующим образом:

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

Что вам нужно позвонить страницу с URL, который выглядит примерно так:

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

Обратите внимание, что & закодированной в %26.Теперь$_GET будет выглядеть следующим образом:

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

... и запрос будет работать, как ожидалось.

EDIT Я только что заметил, что вы используете $_POST, но те же правила применяются к телу запроса, и я все еще думаю, что это ваша проблема. Если вы, как я подозреваю, использую Javascript/AJAX для вызова страницы, вам необходимо передать строку URL через encodeURIComponent().

+0

Спасибо за быстрый ответ. Я пробовал encodeURIComponent(), и это сработало! –

+0

И вот результат, вы, ребята: http://a19.nu/ :) Спасибо! –

0

Вполне вероятно, QueryString не передается. Похоже, вы получаете его от сообщения FORM. Помните, что сообщения в форме, которые используют метод GET, добавляют запрос, чтобы передать все переменные формы, поэтому любая последовательность запросов в действии обычно игнорируется.

Итак, первое, что нужно сделать, это повторить URL-адрес, прежде чем пытаться выполнить INSERT, чтобы убедиться, что вы получаете данные, которые, по вашему мнению, вы есть.

Если есть переменные, которые необходимо передать с помощью URL-адреса, используйте скрытые входы для этого и метод GET в теге формы, и они будут добавлены магически в качестве параметров querystring.

-1

В зависимости от того, что вы хотите сделать с сохраненным значением, вы также UrlEncode() строка: http://php.net/manual/de/function.urlencode.php

Cheers, Max

P.S .: SQL * Plus для баз данных Oracle.

-1

возможно избежать URL с UrlEncode, то вы можете расшифровать его, если вы хотите, чтобы вытащить его из БД

0

Право !! Проблема здесь не имеет ничего общего с запросом базы данных, который DaveRandom сказал. Просто используйте функцию javascript «encodeURIComponent()».

Смежные вопросы