Redbeanphp - 使用多个条件安全查询

时间:2015-10-16 11:23:32

标签: php mysql redbean

我的数据库中有一个用户列表,例如使用firstname,lastname和company,这些都是textfields。现在我有一个自动填充字段,可以输入firstname,lastname和company来查找具有相似名称或公司名称的用户。我想用RedbeanPHP完成这个。不幸的是,文档没有解释如何在他们的" finder" -functions中实现多个条件。此外," exec" -function也没有得到很好的解释,因为我不知道如何将表格中的值准备到手册中。

这是我的解决方案,在输入名字或姓氏或公司时找到用户:

        if (!empty($_POST['autocomplete'])) {
            $userListbyFirstname = R::find( 'user', ' firstname LIKE ?', [ '%' . $_POST['autocomplete'] . '%' ] );
            $userListbyLastname = R::find( 'user', ' lastname LIKE ?', [ '%' . $_POST['autocomplete'] . '%' ] );
            $userListbyCompany = R::find( 'user', ' company LIKE ?', [ '%' . $_POST['autocomplete'] . '%' ] );
            $userRbList = array_merge($userListbyFirstname, $userListbyLastname, $userListbyCompany);
            $userList = array();
            foreach ($userRbList as $userRb) {
                $userList[] = $userRb['firstname'] . ' ' . $userRb['lastname'] . ' ' . (!empty($userRb['company']) ? $userRb['company'] : '');
            }
            return json_encode($userList);
        }
        else
        {
            return json_encode(array());
        }

当有人进入" John Williams"它返回一个空数组,即使有一个数据库条目。我会知道如何使用普通的php,但不知道如何完成,可以使用RedBeanPHP一起搜索那些多个字段(=多个条件)。

1 个答案:

答案 0 :(得分:1)

要求:使用WHERE redbeanPHP时,为find function子句添加多个条件。

find函数需要有效的SQL WHERE子句。它可以是任何有效的SQL。通常,需要一些多列过滤器。

示例:要匹配firstnamelastnamecompany

SQL Query字符串将类似于:

' (firstname LIKE ?) or (lastname LIKE ?) or (company LIKE ?)'

现在,有三个placeholders所以当执行查询时,它需要parameters数组中的三个运行时值。

示例:

array( '%'. $_POST['firstname'] .'%',
       '%'. $_POST['lastname']  .'%',
       '%'. $_POST['company']   .'%' 
    ) 

现在,redbeanPHP获取您提供的SQL where子句,并将其附加到生成的查询中。然后prepares生成的SQL看起来像:

SELECT * 
FROM user
WHERE  (firstname LIKE ?) or (lastname LIKE ?) or (company LIKE ?);

然后使用您提供的运行时参数数组执行查询。

这就是:

R::find('user', 
        ' (firstname LIKE ?) or (lastname LIKE ?) or (company LIKE ?)',             
         array( '%'. $_POST['firstname'] .'%',
                '%'. $_POST['lastname']  .'%',
                '%'. $_POST['company']   .'%')
       );

实际上确实如此。