试图插入包含';'的值在MySQL中,我该怎么做?

时间:2014-05-29 22:26:26

标签: mysql

我试着在MySQL中输入以下代码:

<img src='http://romaniaz.net/forumz/styles/SE_Gamer_Dark/imageset/logo.png' alt='' style='width: 100px; height: 100px; float: left; margin: 20px'>

但由于我使用的是;符号,因此不允许我这样做。如何在MySQL中插入这些值?我读过DELIMITER,但这是我遇到的最令人困惑的事情。

编辑:

mysql_query("INSERT INTO blog_posts (PostTitle, PostBody, PostAuthor, PostDate, PostTags, views) VALUES (
        '" . $title . "',
        '" . $blogpost . "',
        '" . $author . "',
        '" . $date . "',
        '" . $tags . "',
        '" . $views . "')");

是的,我知道我必须从mysql_*切换。

所以问题是$ blogpost包含带有HTML样式标记的图像,并自动包含一个或多个分号......

3 个答案:

答案 0 :(得分:2)

@Nawed Khan是正确的,这与支持或不支持的分号无关。字符串内的分号对SQL不是特殊的。但是你的字符串中有单引号,它终止了SQL中的单引号分隔字符串。

一个更简单的教科书案例是试图插入一个爱尔兰名字:

INSERT INTO mytable (name) VALUES ('O'Reilly')

O&#39; Reilly中的撇号结束了字符串,所以后面的内容对SQL没有任何意义。修复是为了逃避撇号,因此它只计算为字符,而不是字符串终止。

INSERT INTO mytable (name) VALUES ('O\'Reilly')

标准SQL也允许通过加倍单引号字符来完成同样的事情。 MySQL支持这一点,但由于某种原因,它不再被使用了。

INSERT INTO mytable (name) VALUES ('O''Reilly')

使用ext / mysql API解决这个问题的方法是使用mysql_real_escape_string()。这会找到麻烦的字符,并使用反斜杠方法将其转义。

$title = mysql_real_escape_string("<img src='http://romaniaz.net/forumz/styles/SE_Gamer_Dark/imageset/logo.png' alt='' style='width: 100px; height: 100px; float: left; margin: 20px'>");

mysql_query("INSERT INTO blog_posts (PostTitle, ...)
 VALUES ('$title', ...");

请注意,您不必打破双引号PHP字符串,将简单PHP变量的值放在该字符串中。

答案 1 :(得分:1)

仅供参考,该查询可以通过这种方式重写......

"
INSERT INTO blog_posts 
(PostTitle
, PostBody
, PostAuthor
, PostDate
, PostTags
, views) VALUES 
('$title'
,'$blogpost'
,'$author'
,'$date'
,'$tags'
,'$views'
);
";

答案 2 :(得分:1)

它不是导致问题的分号,而是HTML中的单引号。用两个单引号转义它们或使用双引号:

转义:

<img src=''http://romaniaz.net/forumz/styles/SE_Gamer_Dark/imageset/logo.png'' alt='''' style=''width: 100px; height: 100px; float: left; margin: 20px''>

双引号:

<img src="http://romaniaz.net/forumz/styles/SE_Gamer_Dark/imageset/logo.png" alt="" style="width: 100px; height: 100px; float: left; margin: 20px">