在sql表中插入html

时间:2011-01-17 01:38:17

标签: php sql mysql

我正在尝试将一个值插入到我的sql表中,其中包含html:如下所示

<?
$story ="<div class='post'><p class='date'>$mont<b>$day</b></p><h2    class='title'>lkjljt</h2><p class='meta'><small>Posted $name | $school, $date | Rating</small></p><div class='entry'>$message</div></div>";

$db = mysql_connect("host", "user", "password"); 
mysql_select_db("db", $db); 

 if (!$db)
  {
  die('Could not connect: ' . mysql_error());
  }

 $sql = "INSERT INTO Post VALUES ('', '$date', '$time', '$story',  '$school','$location', '$sex', '$zipcode', '$name');";

 $result = mysql_query($sql);


 if($result)
 { $success = " Your hookup has been submitted ";}
 else{
  $error = "something went horribly wrong" . mysql_error();}



 ?>

当我提交此页面时,我一直收到语法错误,如果我评论$ story,则查询运行正常。我该如何解决这个问题?

2 个答案:

答案 0 :(得分:5)

最可能的原因是$ story包含单引号,这将破坏查询。 使用mysql_real_escape_string保护它

一般来说,这是一个糟糕的想法,因为它对SQL注入是开放的。

$sql = "INSERT INTO Post VALUES ('', '$date', '$time', '$story',
       '$school','$location', '$sex', '$zipcode', '$name');";

至少使用mysql_real_escape_string来保护MySQL查询中具有特殊含义的字符的输入。在所有文本列上使用它。

$sql = "INSERT INTO Post VALUES ('', '$date', '$time', '" .
       mysql_real_escape_string($story) . "','".
       mysql_real_escape_string($school) . "','".
       mysql_real_escape_string($location) . "', '$sex', '$zipcode', '" .
       mysql_real_escape_string($name) ."');";

答案 1 :(得分:1)

如果您不关心SQL注入(虽然我不知道您为什么不这样做),您也可以使用htmlspecialchars来解决您的问题。 mysql_real_escape_string显然是更好的选择,尽管像@cyberkiwi说的那样