Mysql+;带有特殊字符的php,如';(撇号)和“;(引号)
我一直在努力解决一个小问题有一段时间了。它已经存在多年了,但它只是一个令人恼火的问题,不是一个严重的问题,我只是在解决它。但现在我想知道是否有人能帮助我。我做了一些谷歌搜索,但没有成功 如果我从php文件中的html文本区域发布表单,如下所示:Mysql+;带有特殊字符的php,如';(撇号)和“;(引号),php,mysql,sql,apostrophe,Php,Mysql,Sql,Apostrophe,我一直在努力解决一个小问题有一段时间了。它已经存在多年了,但它只是一个令人恼火的问题,不是一个严重的问题,我只是在解决它。但现在我想知道是否有人能帮助我。我做了一些谷歌搜索,但没有成功 如果我从php文件中的html文本区域发布表单,如下所示: <form action="http://action.com" method="post"> <textarea name="text"><a href="http://google.com">google's si
<form action="http://action.com" method="post">
<textarea name="text"><a href="http://google.com">google's site</a></textarea>
</form>
现在我得到了mysql错误:
您的SQL语法有错误;请查看与MySQL服务器版本对应的手册,以获取第1行中使用的near的站点“”的正确语法
转义字符串:D
不要使用旧的mysql*函数,而是使用PDO和编写参数化查询-在向数据库中添加用户提供的值时,至少要使用mysql\u real\u escape\u字符串。您应该查看绑定参数或mysqli,以便查询:
INSERT INTO `table` (`row1`) VALUES (?)
然后呢?在对输入进行清理后,将替换为实际值
在您的情况下,请使用:
$result = mysql_query("INSERT INTO `table` (`row1`) VALUES ('".mysql_real_escape_string($_POST['text'])."') ") or die(mysql_error());
阅读SQL注入。尽快做好这件事是值得的 您的sql字符串将是:
INSERT INTO `table` (`row1`) VALUES ('google's site')
这不是一个有效的语句。正如Nanne所写,至少用mysql\u real\u escape\u string转义字符串:
并阅读有关sql注入的信息
想一想:如果有人发布这个:$\u POST['text']
,其值为:);从表中删除代码>
您可以对您的数据说再见:)
始终筛选/转义输入
编辑:从PHP5.5.0开始,mysql\u real\u escape\u字符串和mysql扩展已被弃用。请改用mysqli扩展名和mysqli::escape_string函数您可以使用addslashes()函数。它引用带有斜杠的字符串。因此,当你在你的领域中添加任何撇号时,它将对你非常有用
$result = mysql_query("INSERT INTO `table` (`row1`) VALUES ('".addslashes($_POST['text'])."') ") or die(mysql_error());
在mysql中更新数据时,我也在为字符而挣扎
但我最终得到了一个更好的答案,这里是:
$lastname = "$_POST["lastname"]"; //lastname is : O'Brian, Bran'storm
当您要更新数据库时,系统不会更新它,除非您使用MySQL真正的转义字符串。
在这里:
那么您的查询肯定会更新
Example: mysql_query("UPDATE client SET lastname = '$lastname' where clientID = '%"); //This will update your data and provide you with security.
有关更多信息,请查看
希望这有帮助,只要使用准备好的语句,就不必担心转义或sql注入
$con = <"Your database connection">;
$input = "What's up?";
$stmt = $con->prepare("insert into `tablename` (`field`)values(?)");
$stmt->bind_param("s",$input);
$stmt->execute();
$con=;
$input=“怎么了?”;
$stmt=$con->prepare(“插入到`tablename`(`field`)值(?);
$stmt->bind_参数(“s”,$input);
$stmt->execute();
如果您使用的是php版本>5.5.0,则必须这样使用
$con = new mysqli("localhost", "your_user_name", "your_password", "your_db_name");
if ($con->query("INSERT into myCity (Name) VALUES ('".$con->real_escape_string($city)."')")) {
printf("%d Row inserted.\n", $con->affected_rows);
}
您必须正确地转义字符串,否则您将允许。作为一个很好的副作用,防止SQL注入将解决您的问题。您可以说mysql\u real\u escape\u string()输入过滤与SQL无关。必须对每个数据进行转义,而不仅仅是inputLol,为什么要进行向下投票?我们在这里讨论输入,这就是我为什么写输入的原因。这就是为什么有一个。。。最后,我写它只是为了说明任何人都可以用当前代码运行任何sql。正如我所看到的,问题不是“我什么时候应该转义数据?”而是“出了什么问题……”谢谢你,你给了我一个删除表的提示。实际的例子对我来说并不重要。在那里我可以找到未来的答案!谢谢@别理上校的弹片。他父母过去常常连续几个小时把他锁在壁橱里。拍拍他的头,说声“谢谢,上校”,然后轻快地走开。
$con = <"Your database connection">;
$input = "What's up?";
$stmt = $con->prepare("insert into `tablename` (`field`)values(?)");
$stmt->bind_param("s",$input);
$stmt->execute();
$con = new mysqli("localhost", "your_user_name", "your_password", "your_db_name");
if ($con->query("INSERT into myCity (Name) VALUES ('".$con->real_escape_string($city)."')")) {
printf("%d Row inserted.\n", $con->affected_rows);
}