我有一个带有许多参数的PHP方法,所有参数都是可选的。 SQL查询使用这些参数从员工数据库中进行选择,其中每个参数都像技能/角色。它看起来像这样:
getMedicalStaff($active = 1, $consultant = 0, $ana = 0, $outreach = 0, $prescribedBy = 0, $respiteCare = 0)
创建SQL查询以从数据库中选择行的最佳方法是什么?记住每个参数可能需要也可能不需要?我知道理论上可以称这种方法并不要求任何东西,但在实践中不太可能发生。
我尝试过几种不同的方法,但都没有正常工作。我的第一次尝试是这样的:
// Build query
$argActive = ($active == 1) ? 'true' : 'false';
SELECT * FROM MedStaff WHERE Active = $argActive
但这显然是有缺陷的,因为当它们的价值无关紧要时,它会要求某些字段明确为假。
我接下来尝试的是构建SQL查询,如下所示:
$argActive = (active == 1) ? 'active = true' : '';
但是接下来我不得不乱用每个参数变量与AND之间的间隙,而不知道下一个参数变量是否实际包含任何东西。
我也试过这个:
$argActive = ($active == 1) ? '= true' : 'IS NULL';
$sql = "SELECT * FROM MedStaff WHERE Active $argActive
问题是我无法保证数据库字段显式为NULL,即使它们是空的' (我继承了数据库设计)所以这似乎不起作用。
解决我的困境的最佳方法是什么?这感觉就像以前遇到过的问题一样,并且必须有一个标准的接受答案,但是我找不到一个在Google搜索中有用的问题。
答案 0 :(得分:1)
使用一系列条件:
$wheres = array();
if ($active) {
$wheres[] = 'active = true';
}
if ($consultant)
$wheres[] = 'consultant = true';
}
然后将它们与implode()
:
$where_string = implode(' AND ', $wheres);
$sql = "SELECT * FROM MedStaff";
if ($where_string) {
$sql .= " WHERE " . $where_string;
}