php - Redbeanphp - 多条件安全查询

标签 php mysql redbean

我的数据库中有一个用户列表,例如有名字、姓氏和公司,它们都是文本字段。现在我有一个自动完成字段,可以在其中输入名字、姓氏和公司来查找具有相似姓名或公司名称的用户。我想用 RedbeanPHP 来完成这个。不幸的是,文档没有解释如何将多个条件实现到它们的“查找器”功能中。此外,“exec”函数也没有得到很好的解释,因为我不知道如何将表单中的值准备到手动语句中。

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

        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 一起搜索这些多个字段(= 多个条件)。

最佳答案

需求:使用redbeanPHPfind函数时,在WHERE子句中添加多个条件。

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

示例:匹配 firstname OR lastname OR company

SQL 查询字符串类似于:

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

现在,有三个占位符,所以当执行查询时,它需要在parameters 数组中包含三个运行时值。

例子:

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

现在,redbeanPHP 获取您提供的 SQL where 子句并将其附加到生成的查询中。然后它准备生成的 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']   .'%')
       );

确实如此。

关于php - Redbeanphp - 多条件安全查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33169273/

相关文章:

c# - 尝试读取结果集时遇到 fatal error 。 MySQL 网站

php - codeigniter,将对象传递给 View

php - 使用 PHP 将数组值分配给变量并插入到 mysql

php - 一个查找表,存储在 MySQL 或 PHP 中

mysql - sql server中的日期替代

mysql - RedBeanPHP 多个 FK 到同一个表

php - 在php表中调用下拉函数

php - 使用 PHP 从 mysql 数据库删除行时出错

PHP 红 bean ORM 性能问题

orm - RedBean:如何删除所有表中的所有行