如果数组中存在特定值,如何将动态值传递给 where 条件?



我正在将值作为关联数组从ajax发送到PHP,根据某些值,我应该将语句包含在WHERE语句中。例如,我有这种数组

Array
(
[project_name] => Riverside
[property_type] => For Rent
[rooms] => default
)

如果房间值等于默认值,我不应该对房间使用 WHERE 语句,所以它看起来像这样。

$sql = SELECT Property_Type, Property_Name, Rooms from  appartment
WHERE Project_Name = :project_name AND
Property_Type = :property_type;

如果数组房间等于 2,则 SQL 语句应如下所示

$sql = SELECT Property_Type, Property_Name, Rooms from  appartment
WHERE Project_Name = :project_name AND
Property_Type = :property_type AND Rooms = 2;

我不想写单独的sql语句,因为这也适用于project_name,如果值All projectsproject_type则不应在Where语句中使用Project_Name

谁能解释一下我如何实现这一目标?

动态构建查询:

$sql = 'SELECT Property_Type, Property_Name, Rooms from  appartment';
$where = [];
$params = [];
foreach ($_GET['WhereConditions'] as $key => $value) {
switch($key) {
case 'rooms':
if ($value == 2) {
$where[] = "`Rooms` = :roomsCount";
$params[':roomsCount'] = 2;
}
break;
...
}
}
if (!empty($where)) {
$sql .= ' WHERE '.implode('AND', $where);
}
$db->prepare($sql)->fetchAll($params);

最新更新