作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
假设我有一个根据特定条件构建的 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);
}
这似乎很啰嗦,尤其是在查询的构建方式有很多条件的情况下。有没有人知道如何在不必添加大量条件测试的情况下执行此操作。
如有任何想法,我们将不胜感激。
问候
詹姆斯
最佳答案
您可以使用包含值的数组并将其作为参数发送到 execute()
方法。
如果 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);
关于php - PDO Bind Params 取决于它们是否存在于查询中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29498155/
我是一名优秀的程序员,十分优秀!