11

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

如果我从 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 行的“站点”附近使用正确的语法

4

8 回答 8

22

您的 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 函数

于 2011-01-11T16:30:51.057 回答
10

将用户提供的值添加到数据库时,始终至少使用 mysql_real_escape_string。您应该查看绑定参数或 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 注入。值得尽快做对!

于 2011-01-11T16:27:49.277 回答
3

转义字符串:D

http://php.net/manual/en/function.mysql-real-escape-string.php

于 2011-01-11T16:26:19.450 回答
2

您可以使用 addlashes() 函数。它用斜杠引用字符串。因此,当您在字段中添加任何撇号时,它对您非常有用。

$result = mysql_query("INSERT INTO `table` (`row1`) VALUES ('".addslashes($_POST['text'])."') ") or die(mysql_error());
于 2012-09-26T05:24:14.417 回答
1

而不是使用旧的 mysql* 函数,使用 PDO 并编写参数化查询 - http://php.net/pdo

于 2011-01-11T16:27:19.433 回答
0

当我在 mysql 中更新数据时,我也在为字符而苦苦挣扎。

但我终于找到了一个更好的答案,这里是:

$lastname = "$_POST["lastname"]"; //lastname is : O'Brian, Bran'storm

并且当您要更新数据库时,除非您使用 MySQL REAL Escape String,否则系统不会更新它。这里:

$lastname = mysql_real_escape_string($_POST["lastname"]);  // This Works Always.

然后你查询肯定会更新。

Example: mysql_query("UPDATE client SET lastname = '$lastname' where clientID = '%"); //This will update your data and provide you with security.

有关更多信息,请检查MYSQL_REAL_ESCAPE_STRING

希望这可以帮助

于 2015-10-09T09:48:24.137 回答
0

只需使用准备好的语句,您就不必担心转义或 sql 注入。

$con = <"Your database connection">;
$input = "What's up?";
$stmt = $con->prepare("insert into `tablename` (`field`)values(?)");
$stmt->bind_param("s",$input);
$stmt->execute();
于 2019-05-30T22:56:05.337 回答
0

如果您使用的是 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);
}
于 2021-01-04T18:43:01.180 回答