Php 表单可以返回不同数量的值,尝试在查询中使用返回的值

Php 表单可以返回不同数量的值,尝试在查询中使用返回的值,php,sql,doctrine,mariadb,Php,Sql,Doctrine,Mariadb,我已经在数据库中保存了一堆经过解析的消息,我希望能够根据用户输入提取结果。我想按1-4个值(稍后有更多选项)、用户名、id、电子邮件或日期和时间进行排序。我一直在用条令来做我的其他查询,但这一个,我就是搞不懂 我的问题是,我不知道如何检查哪些值被传递到方法中,而只查询那些值 例如: 用户在用户名中输入“bob”,然后bob@example.com“输入电子邮件字段。在这种情况下,我需要条令看起来像这样: $queryBuilder ->select('*')

我已经在数据库中保存了一堆经过解析的消息,我希望能够根据用户输入提取结果。我想按1-4个值(稍后有更多选项)、用户名、id、电子邮件或日期和时间进行排序。我一直在用条令来做我的其他查询,但这一个,我就是搞不懂

我的问题是,我不知道如何检查哪些值被传递到方法中,而只查询那些值

例如:

用户在用户名中输入“bob”,然后bob@example.com“输入电子邮件字段。在这种情况下,我需要条令看起来像这样:

$queryBuilder
            ->select('*')
            ->from('m2m_messages')
            ->where('username = ' . $queryBuilder->createNamedParameter($params[username]))
            ->andWhere('email = ' . $queryBuilder->createNamedParameter($params[email]))
        $query = $queryBuilder->execute();
$params [
    username => 'bob',
    email => 'bob@example.com'
]
但我希望它能改变,而不是为每一个场合分别创建所有副本。。。如果我想指定ID和电子邮件,它应该只接受这些值

我通过一个数组传入这些值,该数组只包含我需要在sql中使用的搜索词。对于上面的示例,它看起来像这样:

$queryBuilder
            ->select('*')
            ->from('m2m_messages')
            ->where('username = ' . $queryBuilder->createNamedParameter($params[username]))
            ->andWhere('email = ' . $queryBuilder->createNamedParameter($params[email]))
        $query = $queryBuilder->execute();
$params [
    username => 'bob',
    email => 'bob@example.com'
]
我还没有找到一种在代码中实现if(isset)的方法,这种方法允许我只自动使用传入方法的值

我的目标是能够在任意数量的字段中输入详细信息,输入的值在数组中传递,它们的任何组合都会被接受并精心编制到sql脚本中,而无需分别编写20多个不同的sql脚本。

类似的内容

$queryBuilder
    ->select('*')
    ->from('m2m_messages');

if (count($params) > 0) {
    $isFirst = true;
    foreach ($params as $paramKey => $paramValue) {
        if ($isFirst) {
            $queryBuilder->where(sprintf('%1$s = %2$s', $paramKey, $queryBuilder->createNamedParameter($paramValue)));
            $isFirst = false;
        } else {
            $queryBuilder->andWhere(sprintf('%1$s = %2$s', $paramKey, $queryBuilder->createNamedParameter($paramValue)));
        }
    }
}
$query = $queryBuilder->execute();
其概念是迭代您的参数,并添加
$params

中提供的where条件,类似于这样

$queryBuilder
    ->select('*')
    ->from('m2m_messages');

if (count($params) > 0) {
    $isFirst = true;
    foreach ($params as $paramKey => $paramValue) {
        if ($isFirst) {
            $queryBuilder->where(sprintf('%1$s = %2$s', $paramKey, $queryBuilder->createNamedParameter($paramValue)));
            $isFirst = false;
        } else {
            $queryBuilder->andWhere(sprintf('%1$s = %2$s', $paramKey, $queryBuilder->createNamedParameter($paramValue)));
        }
    }
}
$query = $queryBuilder->execute();

这个概念是迭代您的参数并添加
$params

中提供的where条件,我完全没有想到在我完成构建查询后,我可能会向其中添加andwhere。。。这是我一直在尝试的,但没有想到查询生成器是这样工作的,谢谢你的回答!嗯,在我完成查询后,我完全没有想到我可能会添加和它的位置。。。这是我一直在尝试的,但没有想到查询生成器是这样工作的,谢谢你的回答!