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