我创建了一个页面,使用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!";
}
?>
如何解决将符号插入数据库的问题?
答案 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:准备语句比转义字符串更好。