我一直在努力解决一个小问题。它已经存在了很多年,但这只是一个令人烦恼的问题,而不是一个严重的问题,我已经解决了这个问题。但是现在我想找出是否有人可以帮助我。我做了一些谷歌搜索,但没有成功。
如果我从php文件中的html textarea进行表单发布,如下所示:
<form action="http://action.com" method="post"> <textarea name="text"><a href="http://google.com">google's site</a></textarea> </form>
当然还有一个提交按钮,依此类推。
值是问题所在:<a href="http://google.com">google's site</a>textarea的值同时具有“(引号)和’(撇号)。
<a href="http://google.com">google's site</a>
要将其保存在mysql_database中,请执行以下操作:
$result = mysql_query("INSERT INTO `table` (`row1`) VALUES ('".$_POST['text']."') ") or die(mysql_error());
现在我得到了mysql错误:
您的SQL语法有误;检查与您的MySQL服务器版本相对应的手册以获取在第1行的“站点附近”使用的正确语法
您的sql字符串将为:
INSERT INTO `table` (`row1`) VALUES ('google's site')
这不是有效的声明。正如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;....
$_POST['text']
');delete from table;....
您可以对数据说再见:)
始终过滤/转义输入!
编辑:从PHP 5.5.0起,不推荐使用mysql_real_escape_string和mysql扩展名。 请改用mysqli扩展名和mysqli :: escape_string函数