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函数
在将用户提供的值添加到数据库时,始终至少使用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注入.值得尽快做好!
| 归档时间: |
|
| 查看次数: |
87829 次 |
| 最近记录: |