Php 如何将包含引号的字符串插入数据库?

Php 如何将包含引号的字符串插入数据库?,php,mysql,Php,Mysql,当我尝试插入包含引号的字符串时,插入查询失败。如何插入带单引号或双引号的字符串 例如: $message = "Bob said 'don't forget to call me'"; mysql_query("INSERT INTO someTable (messages) VALUES ('$message')"); 我认为需要对输入进行过滤,但我应该使用哪个函数进行过滤?请参见: 在用户进入数据库之前,您应该始终对其提供的任何内容进行转义,以防止在任何情况下进行SQL注入 $messa

当我尝试插入包含引号的字符串时,插入查询失败。如何插入带单引号或双引号的字符串

例如:

$message = "Bob said 'don't forget to call me'";

mysql_query("INSERT INTO someTable (messages) VALUES ('$message')");
我认为需要对输入进行过滤,但我应该使用哪个函数进行过滤?

请参见:

在用户进入数据库之前,您应该始终对其提供的任何内容进行转义,以防止在任何情况下进行SQL注入

$message = mysql_real_escape_string($message);
此函数应应用于要插入到引号中的查询中的每个变量。没有例外。
它并不是真正的保护措施,而只是一个语法规则

虽然你也需要真正的保护。
我在最近的回答中详细解释了这一点:

一个问题整整一个小时,没有人提到转义字符串是邪恶的,你应该找到一种非常有效的方法来消除最坏的情况。如果我们有OP提到的字符串,而不是来自用户,会怎么样?“那就不能逃跑了吗?”比利·奥内尔,我不知道它能自己给出一个未被替换的数据。怎么做?我的意思是逃跑不是魔杖。它不会使任何数据“安全”。它仅适用于引号分隔的字符串。所以,如果你要添加一个没有引号的数字,那么mysql\u real\u escape\u字符串就没用了。@Starx:它会自动取消转义。转义完全是为了SQL解析器的好处——它不会进入转义的数据库,除非您使用的不是为数据库设计的东西。。。i、 e.
addslashes
。(它在进入数据库之前不会被SQL解析器替换)@Col:True。我假设在这种情况下,如果是用户提供的,您将使用PHP进行转换,而不是数据库。
除非您使用的不是为数据库设计的东西
-有什么区别吗?:)我链接到的答案中提到了这一点。我知道你接受了“你的常识”的答案,但你真的需要回头看看@Steven Schlansker的答案,因为你应该从一开始就养成良好的编程习惯。