Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql+;带有特殊字符的php,如';(撇号)和“;(引号)_Php_Mysql_Sql_Apostrophe - Fatal编程技术网

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

Mysql+;带有特殊字符的php,如';(撇号)和“;(引号),php,mysql,sql,apostrophe,Php,Mysql,Sql,Apostrophe,我一直在努力解决一个小问题有一段时间了。它已经存在多年了,但它只是一个令人恼火的问题,不是一个严重的问题,我只是在解决它。但现在我想知道是否有人能帮助我。我做了一些谷歌搜索,但没有成功 如果我从php文件中的html文本区域发布表单,如下所示: <form action="http://action.com" method="post"> <textarea name="text"><a href="http://google.com">google's si

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

如果我从php文件中的html文本区域发布表单,如下所示:

<form action="http://action.com" method="post">
<textarea name="text"><a href="http://google.com">google's site</a></textarea>
</form>
现在我得到了mysql错误:

您的SQL语法有错误;请查看与MySQL服务器版本对应的手册,以获取第1行中使用的near的站点“”的正确语法

转义字符串:D


不要使用旧的mysql*函数,而是使用PDO和编写参数化查询-

在向数据库中添加用户提供的值时,至少要使用mysql\u real\u escape\u字符串。您应该查看绑定参数或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注入。尽快做好这件事是值得的

您的sql字符串将是:

INSERT INTO `table` (`row1`) VALUES ('google's site')
这不是一个有效的语句。正如Nanne所写,至少用mysql\u real\u escape\u string转义字符串:

并阅读有关sql注入的信息

想一想:如果有人发布这个:
$\u POST['text']
,其值为:
);从表中删除

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

始终筛选/转义输入

编辑:从PHP5.5.0开始,mysql\u real\u escape\u字符串和mysql扩展已被弃用。请改用mysqli扩展名和mysqli::escape_string函数

您可以使用addslashes()函数。它引用带有斜杠的字符串。因此,当你在你的领域中添加任何撇号时,它将对你非常有用

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

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

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

$lastname = "$_POST["lastname"]"; //lastname is : O'Brian, Bran'storm
当您要更新数据库时,系统不会更新它,除非您使用MySQL真正的转义字符串。 在这里:

那么您的查询肯定会更新

Example: mysql_query("UPDATE client SET lastname = '$lastname' where clientID = '%"); //This will update your data and provide you with security.
有关更多信息,请查看


希望这有帮助,只要使用准备好的语句,就不必担心转义或sql注入

$con = <"Your database connection">;
$input = "What's up?";
$stmt = $con->prepare("insert into `tablename` (`field`)values(?)");
$stmt->bind_param("s",$input);
$stmt->execute();
$con=;
$input=“怎么了?”;
$stmt=$con->prepare(“插入到`tablename`(`field`)值(?);
$stmt->bind_参数(“s”,$input);
$stmt->execute();

如果您使用的是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);
}

您必须正确地转义字符串,否则您将允许。作为一个很好的副作用,防止SQL注入将解决您的问题。您可以说mysql\u real\u escape\u string()输入过滤与SQL无关。必须对每个数据进行转义,而不仅仅是inputLol,为什么要进行向下投票?我们在这里讨论输入,这就是我为什么写输入的原因。这就是为什么有一个。。。最后,我写它只是为了说明任何人都可以用当前代码运行任何sql。正如我所看到的,问题不是“我什么时候应该转义数据?”而是“出了什么问题……”谢谢你,你给了我一个删除表的提示。实际的例子对我来说并不重要。在那里我可以找到未来的答案!谢谢@别理上校的弹片。他父母过去常常连续几个小时把他锁在壁橱里。拍拍他的头,说声“谢谢,上校”,然后轻快地走开。
$con = <"Your database connection">;
$input = "What's up?";
$stmt = $con->prepare("insert into `tablename` (`field`)values(?)");
$stmt->bind_param("s",$input);
$stmt->execute();
$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);
}