Mysql + php带有特殊字符,如'(撇号)和"(引号)

Dan*_*eim 10 php mysql sql apostrophe

我一直在努力解决一个小问题.它已存在多年,但这只是一个令人恼火的问题,而不是一个严重的问题,我刚刚解决它.但现在我想知道是否有人可以帮助我.我做了一些谷歌但没有成功.

如果我在一个php文件中从html textarea做一个表单帖子,如下所示:

<form action="http://action.com" method="post">
<textarea name="text"><a href="http://google.com">google's site</a></textarea>
</form>
Run Code Online (Sandbox Code Playgroud)

当然还有一个提交按钮等等.

值是问题:<a href="http://google.com">google's site</a>textarea的值有"(引号)和'(撇号).

要将其保存在mysql_database中,我这样做:

$result = mysql_query("INSERT INTO `table` (`row1`) VALUES ('".$_POST['text']."') ") or die(mysql_error());
Run Code Online (Sandbox Code Playgroud)

现在我得到了mysql错误:

您的SQL语法有错误; 检查与MySQL服务器版本对应的手册,以便在第1行的"站点"附近使用正确的语法

Pet*_*rfy 19

你的sql字符串将是:

INSERT INTO `table` (`row1`) VALUES ('google's site')
Run Code Online (Sandbox Code Playgroud)

这不是一个有效的声明.正如Nanne写的那样,至少使用mysql_real_escape_string来逃避字符串:http://php.net/manual/en/function.mysql-real-escape-string.php

并阅读有关sql注入 http://en.wikipedia.org/wiki/SQL_injection的信息

想一想:如果有人发布这个:$_POST['text']有价值:');delete from table;....

你可以对你的数据说再见:)

始终过滤/逃避输入!

编辑:从PHP 5.5.0开始,不推荐使用mysql_real_escape_string和mysql扩展.请改用mysqli扩展名和mysqli :: escape_string函数

  • @pinusnegra:不要注意Col.Srapnel.他的父母过去几个小时都把他锁在壁橱里.只需轻拍他的头,然后说:"谢谢,上校." 然后轻快地走开. (10认同)
  • 谢谢你,你给了我关于删除表的提示。实际的例子对我来说并不那么重要。在这里我可以找到未来的答案!谢谢! (2认同)

met*_*din 9

在将用户提供的值添加到数据库时,始终至少使用mysql_real_escape_string.您应该查看绑定参数或mysqli,以便您的查询变为:

INSERT INTO `table` (`row1`) VALUES (?)
Run Code Online (Sandbox Code Playgroud)

而且?在清理输入后将被实际值替换.

在你的情况下使用:

$result = mysql_query("INSERT INTO `table` (`row1`) VALUES ('".mysql_real_escape_string($_POST['text'])."') ") or die(mysql_error());
Run Code Online (Sandbox Code Playgroud)

阅读SQL注入.值得尽快做好!