我正在try 用PHP OOP创建一个动态的WHERE子句构建器.我不确定我所做的是正确的.
因此,我创建了一个名为QueryBuilder的类,其中有一个名为$Filters的私有属性(这是一个用于存储筛选器的键和值的数组属性)和两个方法:
1,addFilter()->;用于向查询添加"Filters"
2,getFilters()->;这用于获取WHERE子句字符串和PDO Execute()的参数
以下是我的代码:
class QueryBuilder {
private array $filters;
public function addFilter(array $filterDetails): void
{
$this->filters[] = $filterDetails;
}
public function getFilters(): array
{
$whereClause = " WHERE 1";
if (!empty($this->filters)) {
foreach ($this->filters as $filter) {
$whereClause .= " AND (" . $filter["searchKey"] . " " . $filter["operator"] . " :" . $filter["searchKey"] . ")";
$params[":" . $filter["searchKey"]] = $filter["searchValue"];
}
return ["whereClause" => $whereClause,
"params" => $params];
}
return ["whereClause" => $whereClause,
"params" => null];
}
}
我是这样运作的:
$QueryBuilder = new QueryBuilder();
$sql = "SELECT * FROM mytable";
$name = "Test Name";
$age = 12;
$QueryBuilder->addFilter(["operator" => "LIKE",
"searchKey" => "name",
"searchValue" => $name]);
$QueryBuilder->addFilter(["operator" => "=",
"searchKey" => "age",
"searchValue" => $age]);
$whereClause = $QueryBuilder->getFilters();
echo $sql . $whereClause["whereClause"];
echo "</br>";
echo "<pre>";
print_r($whereClause["params"]);
echo "</pre>";
结果似乎还不错:
SELECT * FROM mytable WHERE 1 AND (name LIKE :name) AND (age = :age)
Array
(
[:name] => Test Name
[:age] => 12
)
但现在我正在try 创建一个WHERE子句,其中是一个BETWEEN运算符,但我不知道如何在这段代码中实现.
无论如何,您认为这是创建查询(WHERE子句)构建器的好方法吗?或者我应该对代码进行一些修改?
谢谢!