如何将符号插入MySQL数据库?

时间:2013-07-11 19:02:14

标签: php jquery mysql ajax database

我创建了一个页面,使用PHP和jQuery将一些数据插入到MySQL数据库中。它工作得很好,但问题是当我尝试插入符号时,例如:

 :) :( :P =D :o ;) :v >:( :/ :'( ^_^ 8) B| <3 3:) O:) -_- o.O >:o :3 (y) 

我收到此错误:

  

您的SQL语法错误

代码(将数据插入数据库)

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
<script type="text/javascript">

$(document).ready(function(){
    $("#insert").click(function(){
      var meesg=$("#reply").val();
      clear();
      $.post('full.php', {messagge: meesg, from: 'cevin', to: 'calvin'},
          function(data){
              $("#message").html(data);
              $("#message").hide();
              $("#message").fadeIn(200);
          });
      return false;
    });
    function clear() {
      $("#myre:input").each(function() {
          $(this).val('');
      });
    }
});
</script>
<a id="insert" title="Insert Data" href="#">Push into mysql</a>

PHP:

<?php
mysql_connect("localhost","root","");
mysql_select_db("datab");
$to=$_POST['to'];
$from=$_POST['from'];
$msg=$_POST['msgg'];
if(empty($msg)){
    exit();
}
$query=mysql_query("INSERT INTO `thetable`(`to`,`from`,`message`) VALUES ('$to','$from','$msg')");
mysql_real_escape_string($query);
if($query){
    echo "Inserted successfully!";
}
else{ 
    echo "An error occurred!"; 
}
?>

如何解决将符号插入数据库的问题?

3 个答案:

答案 0 :(得分:3)

你需要转义参数,而不是整个查询(特别是你在执行后完成它,根本没有意义,因为它太迟了)。所以这是错误的:

# this is wrong!
$query=mysql_query("INSERT INTO `thetable`(`to`,`from`,`message`) VALUES ('$to','$from','$msg')");
mysql_real_escape_string($query);

这样做更好(但仍然可以切换到PDO或至少使用mysqli_):

# this is right
$q = sprintf("INSERT INTO `thetable`(`to`,`from`,`message`) VALUES ('%s','%s','%s')",
      mysql_real_escape_string($to),
      mysql_real_escape_string($from),
      mysql_real_escape_string($msg));
$query=mysql_query($q);

答案 1 :(得分:1)

除了你应该真正使用PDO或MySQLi的事实,你无法逃避整个查询,你必须逃避参数:

$to = mysql_real_escape_string($to);
$from = mysql_real_escape_string($from);
$msg = mysql_real_esacpe_string($msg);
$query=mysql_query("INSERT INTO `thetable`(`to`,`from`,`message`) VALUES ('$to','$from','$msg')");

答案 2 :(得分:0)

你必须逃避大多数符号的安全性原因......当你在它的时候,你可以使用某种卫生来输入你的SQL。我的建议是学习准备陈述等。可以找到更多信息here

如果你不保护sql的输入,当你有人决定对你恶作剧或者破坏你的数据库时,你会有一段不愉快的时光。

PS:准备语句比转义字符串更好。