MySQL" LIKE"用于过滤字符串的子句

时间:2013-08-12 07:42:37

标签: php mysql

我正在尝试为我的网站创建一个过滤系统。当前代码如下所示:

$DB->query("SELECT id FROM filter WHERE filter LIKE '%". $Properties['Title'] ."%'");

if($DB->record_count() != 0) {
    $Err = '[b]Cannot upload this![/b]';
    include(SERVER_ROOT . '/sections/upload/upload.php');
    die();
}

*注意:$ DB-> record_count =涵盖mysqli_num_rows的函数

因为我们将$ Properties作为已上传元素的属性,因此Title将成为字符串标题

示例,上传可能是: Me.And.My.Dog.At.The.Lake

并且过滤器数据库中有一条记录说: me.and.my.dog

代码的目的是发出错误,不允许上传继续。

2 个答案:

答案 0 :(得分:1)

如果我理解正确,你可以使用像这样的查询

SELECT COUNT(*) matches
  FROM filter
 WHERE 'Me.And.My.Dog.At.The.Lake' LIKE CONCAT('%', filter, '%')

注意:

  1. 在与filter
  2. 进行比较时反向上传名称和LIKE
  3. 使用COUNT()返回结果集中的行数,而不是返回可能包含多行的结果集(即使它只是id),然后在客户端读取计数。
  4. 考虑使用prepared statements而不是插入查询字符串。
  5. 这是 SQLFiddle 演示

答案 1 :(得分:1)

使用以下语句获取行计数

         if($DB->fetch(PDO::FETCH_NUM) != 0) {
          $Err = '[b]Cannot upload this![/b]';
              include(SERVER_ROOT . '/sections/upload/upload.php');
             die();
              }