如何插入角色“&”进入MySQL数据库?

时间:2012-01-30 13:01:02

标签: php mysql insert special-characters

我想我之前已经看过这个问题,但我认为它的回答还不够好,因为我无法让它发挥作用。

案件:
我想在我的MySQL数据库中插入一个URL,如下所示:

$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

就像在“&”处剪切网址一样字符。我尝试过:mysql_real_escape_stringhtmlspecialchars,通过"\"等逃避。似乎没有任何效果。

我已经读过你可以用“SQL Plus”或类似的东西来做这件事。

提前致谢。

问候,VG

5 个答案:

答案 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'
)

您需要的是使用看起来更像这样的网址调用页面:

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

请注意,&已编码为%26现在 $_GET将如下所示:

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

...并且查询将按预期工作。

编辑我刚刚注意到您正在使用$_POST,但相同的规则适用于请求正文,我仍然认为这是您的问题。如果你是,我怀疑,使用Javascript / AJAX来调用页面,你需要通过encodeURIComponent()传递URL字符串。

答案 1 :(得分:0)

很可能没有传递查询字符串。看起来你是从FORM帖子收到的。请记住,使用GET方法的表单帖子附加查询字符串以传递所有表单变量,因此通常会忽略操作中的任何查询字符串。

因此,首先要做的是在尝试INSERT之前回显URL,以确保获得您认为自己的数据。

如果您需要使用URL传递变量,请使用隐藏输入,并在表单标记上使用GET方法,它们将作为查询字符串参数神奇地附加。

答案 2 :(得分:0)

对!! DaveRandom说,这里的问题与数据库查询无关。 只需使用javascript函数“encodeURIComponent()”。

答案 3 :(得分:-1)

根据您对存储值的处理方式,您还需要urlencode()字符串:http://php.net/manual/de/function.urlencode.php

干杯, 最大

P.S。:SQL * Plus适用于Oracle数据库。

答案 4 :(得分:-1)

也许用urlencode转义url然后你可以解码它,如果你想把它拉出db