-3

我创建了一个使用 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!"; 
}
?>

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

4

3 回答 3

3

您需要转义parameters,而不是整个查询(尤其是您在执行后进行的,这根本没有意义,因为它太晚了)。所以这是错误的:

# 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);
于 2013-07-11T19:05:42.470 回答
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')");
于 2013-07-11T19:07:22.553 回答
0

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

如果您不保护 sql 的输入,那么当有人决定对您进行恶作剧或一起破坏您的数据库时,您将会遇到一些糟糕的情况。

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

于 2013-07-11T19:11:13.017 回答