Redbeanphp-使用多个条件安全查询
我的数据库中有一个用户列表,例如firstname、lastname和company,它们都是文本字段。现在我有了一个自动完成字段,可以在其中输入firstname、lastname和company来查找具有类似名称或公司名称的用户。我想用RedbeanHP完成这项工作。不幸的是,文档没有解释如何在“finder”函数中实现多个条件。另外,“exec”函数也没有很好地解释,因为在那里我不知道如何将表单中的值准备到手动语句中 以下是我的解决方案,当输入firstname、lastname或company时,它确实可以查找用户:Redbeanphp-使用多个条件安全查询,php,mysql,redbean,Php,Mysql,Redbean,我的数据库中有一个用户列表,例如firstname、lastname和company,它们都是文本字段。现在我有了一个自动完成字段,可以在其中输入firstname、lastname和company来查找具有类似名称或公司名称的用户。我想用RedbeanHP完成这项工作。不幸的是,文档没有解释如何在“finder”函数中实现多个条件。另外,“exec”函数也没有很好地解释,因为在那里我不知道如何将表单中的值准备到手动语句中 以下是我的解决方案,当输入firstname、lastname或comp
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());
}
当有人输入“johnwilliams”时,它返回一个空数组,即使它有一个数据库条目。我知道如何使用普通php,但不知道如何使用RedbeanHP一起搜索这些多个字段(=多个条件)。要求:在使用
RedbeanHP
查找函数时,向WHERE
子句添加多个条件
find
函数需要一个有效的SQL
WHERE
子句。它可以是任何有效的SQL。通常,需要一些多列过滤器
示例:匹配firstname
或lastname
或公司
SQL查询字符串类似于:
' (firstname LIKE ?) or (lastname LIKE ?) or (company LIKE ?)'
现在,有三个占位符
,因此当执行查询时,参数
数组中需要三个运行时值
例如:
array( '%'. $_POST['firstname'] .'%',
'%'. $_POST['lastname'] .'%',
'%'. $_POST['company'] .'%'
)
现在,redbeanppp
获取您提供的SQLwhere
子句,并将其附加到生成的查询中。然后,它准备生成的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'] .'%')
);
事实上是这样 我怀疑您高估了redbeanppp
find
函数的功能。它获取sql字符串并将其附加到WHERE
语句后面生成的sql。然后它准备生成的SQL
查询字符串。所以:要匹配名字和姓氏,请使用SQL字符串:'firstname LIKE?和lastname类似?“
作为SQL。where子句
可以是一个复杂的语句。exec
函数类似。$userRbList=R::find('user','(类似于名字?)或(类似于姓氏?)或(类似于公司?),['%'。$\u POST['autocomplete'.%')代码>不工作,例如像expectedokay,谢谢你的工作!如果你愿意,你可以回答这个问题,我会给你投票,并把它列为最佳答案