一尘不染

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

mysql

我一直在努力解决一个小问题。它已经存在了很多年,但这只是一个令人烦恼的问题,而不是一个严重的问题,我已经解决了这个问题。但是现在我想找出是否有人可以帮助我。我做了一些谷歌搜索,但没有成功。

如果我从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的值同时具有“(引号)和’(撇号)。

要将其保存在mysql_database中,请执行以下操作:

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

现在我得到了mysql错误:

您的SQL语法有误;检查与您的MySQL服务器版本相对应的手册以获取在第1行的“站点附近”使用的正确语法


阅读 348

收藏
2020-05-17

共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;....

您可以对数据说再见:)

始终过滤/转义输入!

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

2020-05-17