Php PDO绑定参数取决于它们是否存在于查询中

Php PDO绑定参数取决于它们是否存在于查询中,php,mysql,pdo,bindparam,Php,Mysql,Pdo,Bindparam,假设我有一个mysql查询,它是根据特定条件生成的:例如 $query = "SELECT * from `usertable` where users_active=:users_active"; if($mode=="archived") { $query .= " AND archived=:archived"; } $stmt = $dbpdo->prepare($query); $stmt->bindParam(':users_active', $users_ac

假设我有一个mysql查询,它是根据特定条件生成的:例如

$query = "SELECT * from `usertable` where users_active=:users_active";
if($mode=="archived") {
    $query .= " AND archived=:archived";
}

$stmt = $dbpdo->prepare($query);
$stmt->bindParam(':users_active', $users_active);
$stmt->bindParam(':archived', $archived);
$stmt->execute();
现在,如果我运行上面的命令,它将只在$mode==“archived”时工作,否则命名的占位符“:archived”将不会是查询的一部分

这在一个方面对我来说是有意义的,但却回避了如何优雅地处理它的问题。我的应用程序中有很多查询是有条件构建的。我可以这样做,但这对我来说似乎是重复:

if($mode=="archived") {
    $stmt->bindParam(':archived', $archived);
}
这似乎很冗长,特别是当查询的构建有很多条件时。有没有人对如何在不添加大量条件测试的情况下实现这一点有更清晰的想法

如有任何想法,将不胜感激

问候


James

您可以使用带有值的数组,并将其作为参数发送给该方法

如果
bindParam()
提供的变量类型转换没有那么重要(您甚至没有使用它…),那么构建查询会变得更容易,因为您可以在构建查询字符串时填充数组

例如:

$query = "SELECT * from `usertable` where users_active=:users_active";
$params = array(':users_active' => $users_active);

if($mode=="archived") {
    $query .= " AND archived=:archived";
    $params[':archived'] = $archived;
}

$stmt = $dbpdo->prepare($query);

$stmt->execute($params);

您可以使用带有值的数组,并将其作为参数发送给方法

如果
bindParam()
提供的变量类型转换没有那么重要(您甚至没有使用它…),那么构建查询会变得更容易,因为您可以在构建查询字符串时填充数组

例如:

$query = "SELECT * from `usertable` where users_active=:users_active";
$params = array(':users_active' => $users_active);

if($mode=="archived") {
    $query .= " AND archived=:archived";
    $params[':archived'] = $archived;
}

$stmt = $dbpdo->prepare($query);

$stmt->execute($params);

您尝试过的错误是什么(有条件地添加参数)。我认为如果代码正常工作,那么应该不会有问题。请添加完整代码如何构建查询查看我关于构建动态查询的答案您尝试过的有什么问题(有条件地添加参数)。我认为如果代码正常工作,那么应该不会有问题。请添加完整代码如何构建查询查看我关于构建动态查询的答案如果我们看到OP的完整代码,我们甚至可以优化ifstatements@Rizier123没错,我只是使用OP的示例来说明您不需要任何额外的
if
语句。我经常这样使用:-)根据OP的完整代码,他可能甚至不需要任何if语句,或者至少他不需要写越来越多的代码。让我们看看OP是怎么说的,我还在等OP的代码::)如果我们能看到OP的完整代码,我们甚至可以优化ifstatements@Rizier123这是真的,我只是用OP的例子来说明你不需要任何额外的
if
语句。我经常这样使用:-)根据OP的完整代码,他可能甚至不需要任何if语句,或者至少他不需要写越来越多的代码。让我们看看OP是怎么说的,我还在等OP的代码:)