【发布时间】:2015-06-12 10:29:58
【问题描述】:
假设我有一个根据特定条件构建的 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);
}
这似乎很冗长,尤其是在查询的构建方式有很多条件的情况下。有没有人对如何做到这一点有一个更简洁的想法,而不必添加大量的条件测试。
任何想法将不胜感激。
问候
詹姆斯
【问题讨论】:
-
您尝试过的有什么问题(有条件地添加参数)。我认为如果代码正常工作,那么它应该不是问题。
-
请添加您构建查询的完整代码
-
查看我的回答 here 构建动态查询