函数来清理mysql搜索字符串(主要是删除通配符)?

时间:2011-08-16 15:37:53

标签: php mysql search sql-injection

是否有内置的php(或MySQL)函数可以清理要在搜索中使用的字符串?在这种情况下,我想在它传递到MySQL正则表达式之前,只创建一个字符串字母(上部和下部)。

我正在使用PDO和参数化查询,因此我并不担心SQL注入。但是,我想确保有人不通过通配符并耗尽太多内存。到目前为止,这是我用来删除除空格和字母表之外的所有内容。这够了吗?

preg_replace("/[^A-Za-z\s\s+]/", "", $query);

2 个答案:

答案 0 :(得分:3)

为什么不简单地删除%??从记忆的角度来看,这些是通配符。从长远来看,这将为您提供最大的可扩展性,而不会为后来的开发人员带来WTF??!的另一种潜力?

就此而言,您可以完全避免使用LIKE来解决问题,但这可能是不可能的。

如果您必须更具选择性,那么我会排除所有[^\w\s]+。您不想排除数字,允许-_几乎没有什么害处。

答案 1 :(得分:2)

你所使用的正则表达式将不仅仅是你担心的通配符,所以我不认为这是最好的解决方案。 (你无疑听过this quote,但无论如何我都会重复。)

  

有些人在面对问题时会想“我知道,我会用   正则表达式。“

     

现在他们有两个问题。

内置的PHP函数可以帮助您进行过滤。如果您要执行清理URL或电子邮件等操作,请查看将filter_var()PHP's sanitize filters结合使用。

但是,在您的情况下,我认为以下内容最简单。

// Are there any I missed?
$keys = array("?", "%");  
$sanitized = str_replace($keys, "", $query);
相关问题