关于php:filter_var或mysqli_real_escape_string

filter_var or mysqli_real_escape_string

本问题已经有最佳答案,请猛点这里访问。

我想知道哪个更强filter_varmysqli_real_escape_string

更具体。

选项1:

1
2
3
//Course Title
$ctitle = trim($_POST['courseTitle']);
$clean_ctitle = filter_var($ctitle, FILTER_SANITIZE_STRING);

选项2:

1
2
3
//Course Title
$ctitle = trim($_POST['courseTitle']);
$clean_ctitle = mysqli_real_escape_string($con, $ctitle);

我也知道准备好的陈述,但我想过滤手中的数据。 如果有替代方案,请告诉我。


它们没有实现相同的目标,你将使用filter_var($ctitle, FILTER_SANITIZE_STRING)去掉不需要的特殊字符,而mysqli_real_escape_string是一个传输编码来应用所需的转换,这样你将存储的内容将完全是你提供的,避免SQL错误或注射。

通常,您将首先使用filter_var()(或您使用的框架中的任何内置功能)从外部输入(表单数据,URL参数...)强制执行格式和允许的字符规则。然后,在保存您验证的数据时,您将使用mysqli_real_escape_string()将数据注入MySQL字符串。

总结一下,

  • filter_var()是关于过滤和验证输入数据。
  • mysqli_real_escape_string()是关于在MySQL字符串中使用数据之前转义数据。

你不应该在它们之间做出选择,你应该同时使用它们;-)


filter_varmysqli_real_escape_string是两个不同的东西。
您还没有真正说过使用字符串的是什么,但过滤器功能没问题,但是其中一些比过滤器更有效。

FILTER_SANITIZE_STRING过滤器选项删除标记并从字符串中删除或编码特殊字符。对于mysql来说,这不是一个好的卫生设施。

所以这取决于你正在消毒什么。

如果您希望在MySQL查询中使用它们之前清理字符串,那么您应该使用mysqli_real_escape_string。但正如你所说,准备好的声明(PDO)更好。