0

我有一个带有许多参数的 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,即使它们是“空的”(我继承了数据库设计),所以这似乎不起作用。

解决我的困境的最佳方法是什么?感觉就像一个以前遇到过很多次的问题,必须有一个标准的公认答案,但我无法在我的谷歌搜索中找到一个有效的答案。

4

1 回答 1

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;
}
于 2013-08-01T10:27:16.000 回答