php - 如何在 PHP PDO 中使用 if 语句执行准备语句?

标签 php mysql pdo prepared-statement

我正在使用 PHP PDO 准备语句从 MySQL 数据库获取一些数据。我必须在执行准备好的语句时使用 if 语句。请参阅下面的代码以更好地理解

$query = "SELECT * FROM my_table WHERE 1=1";

if(isset($_GET['one'])){
    $query .= " AND one = :one";
}

if(isset($_GET['two'])){
    $query .= " AND two = :two";
}

if(isset($_GET['three'])){
    $query .= " AND three = :three";
}

$result = $db->prepare($query);
$result->execute([

    /* ------------------------------------
    How to declare the above parameters here
    as it will show error if any of the if statement is not true? 
    ----------------------------------------*/

]);

我想知道如何在$result->execute(......]) block 中使用if语句声明准备好的数组参数?

最佳答案

您需要创建一个空的 $params 数组,并且在每个 if block 内,您可以将适当的值推送到其中。例如:

if(isset($_GET['one'])){
    $query .= " AND one = :one";
    $params[':one'] = $_GET['one'];
}

然后你就可以简单地做

$result->execute($params);

请注意,根据您所编写的内容,您可以在参数名称列表上使用外部 foreach 来简化代码,例如

$names= array('one', 'two', 'three');
$params = array();
foreach ($names as $name) {
    if (isset($_GET[$name])) {
         $query .= " AND $name = :$name";
         $params[":$name"] = $_GET[$name];
    }
}
$result->execute($params);

关于php - 如何在 PHP PDO 中使用 if 语句执行准备语句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59450727/

相关文章:

php - 在 WHERE 语句中使用相同的列名,使用 "AND"而不是 "OR"

php - 为什么执行查询时只更新/删除表的最后一行?

mysql - 嵌套 JOIN 遇到问题

mysql - 如何获取不在表 “ids” 中的 “service_gos” (Laravel)

php - INSERT IGNORE INTO 不起作用

php - 使用 pdo 检索 mysql 中的复选框数据

php - $_POST 没有得到数字零

php - 表单未提交到数据库

php - 页面不会用 PDO 语句回显结果

php - 如何在 Azure AD Graph API 中创建具有指定目录角色的用户(工作帐户)