我试着在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样式标记的图像,并自动包含一个或多个分号......
答案 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">