【问题标题】:How to insert symbols into MySQL database? [duplicate]如何将符号插入 MySQL 数据库? [复制]
【发布时间】:2013-07-10 04:40:52
【问题描述】:

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

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

【问题讨论】:

标签: php jquery mysql ajax database


【解决方案1】:

您需要转义 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);

【讨论】:

  • 你的意思是像mysql_real_escape_string($msg);这样吗
  • 是的。查看编辑后的答案
  • 太棒了!!!!!!成功了!!!
  • 一个更好的答案是建议 OP 不再使用 mysql_* 函数,因为它们不再受支持,非常过时,在所有受支持的 PHP 5 版本中已弃用,并在 PHP 中完全删除7
  • 我相信but still, switch to PDO or at least use mysqli_ 可以很好地解决您的投诉。
【解决方案2】:

除了您应该真正使用 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')");

【讨论】:

    【解决方案3】:

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

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

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

    【讨论】:

    • 太好了,我也在找那个!谢谢!!
    猜你喜欢
    • 2013-02-21
    • 2020-10-24
    • 2018-12-03
    • 2019-03-11
    • 1970-01-01
    • 1970-01-01
    • 2011-08-06
    • 2012-05-22
    • 2021-04-15
    相关资源
    最近更新 更多