gpt4 book ai didi

php - 如何在 PHP 中构建具有多个参数的 WHERE 子句

转载 作者:行者123 更新时间:2023-11-29 15:42:31 24 4
gpt4 key购买 nike

我有一个 HTML 表单,其中包含 4 个字段。用户可以对一个字段或多个字段进行查询。

根据用户选择的字段,我需要构建一个 WHERE 条件。

我可以检查每个参数是否都有值。但我坚持尝试根据参数是否填充来动态构建 WHERE 子句。

SELECT field1, field2,field3 
FROM table1
WHERE field1 = param1 AND field2 = param2
AND field3 = param3 AND field4 = param4

这就是我检查一个参数所做的事情:

if(isset($_POST)['param1'])) {
$param1 = mysqli_real_escape_string($mysqli, $_POST['param1']);
$stmt = mysqli->prepare("SELECT field1, field2,field3
FROM table1 WHERE field1 = ?");
$stmt->bind_param("s", $param1);
$stmt->execute();
$num_of_rows = $stmt->num_rows;

根据上面的代码,我需要检查参数,然后动态构建 WHERE 子句。

我希望问题很清楚。如果没有,请告诉我。另请注意,我的代码正在小心防止 SQL 注入(inject)。我基本上需要构建 WHERE 子句的逻辑。

最佳答案

我会将参数存储在关联数组中(字段名称=>值),例如:

$params = array("field1" => "param1",
"field2" => "param2",
"field3" => "param3",
"field4" => "param4");

现在,您可以迭代该数组并构建查询的参数化字符串:

$query = "SELECT field1, field2, field3 FROM table1";
$NumberOfParams = count($params);
// Do we have a where clause ?
if ($NumberOfParams > 0)
{
$whereClause = " WHERE ";
$i = 0;
foreach ($params as $ParamName => $value)
{
$whereClause .= $ParamName . " = :" . $ParamName;
// Are we not at last param ?
if (++$i < $NumberOfParams)
{
$whereClause .= " AND ";
}
}
$query .= $whereClause;
}

var_dump($query);

var_dump 输出如下:

string(126) "SELECT field1, field2, field3 FROM table1 WHERE field1 = :field1 AND field2 = :field2 AND field3 = :field3 AND field4 = :field4"

现在您可以使用 pdo 来执行准备好的语句,使用该 $params 数组

// using pdo
$stmt = $dbh->prepare($query);
$stmt->execute($params);

关于php - 如何在 PHP 中构建具有多个参数的 WHERE 子句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57457404/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com