【发布时间】:2017-04-17 04:36:17
【问题描述】:
我有一个从反馈表表中选择记录列表的函数。目前查询是基于两个课程 ID 和用户 ID:
$sql = "SELECT * FROM `feedback` WHERE course_id = :course_id AND user_id = :user_id LIMIT 1";
$stmt = $this->ci->db->prepare($sql);
$result = $stmt->execute([
"course_id" => $course_id,
"user_id" => $user_id
]);
$results = $stmt->fetch(PDO::FETCH_ASSOC);
我想这样做,所以用户 ID 是可选的,但不确定如何最有效地编写它?
例如,我可以这样做:
if ($user_id) {
$sql = "SELECT * FROM `feedback` WHERE course_id = :course_id AND user_id = :user_id LIMIT 1";
$stmt = $this->ci->db->prepare($sql);
$result = $stmt->execute([
"course_id" => $course_id,
"user_id" => $user_id
]);
} else {
$sql = "SELECT * FROM `feedback` WHERE course_id = :course_id LIMIT 1";
$stmt = $this->ci->db->prepare($sql);
$result = $stmt->execute([
"course_id" => $course_id,
]);
}
$results = $stmt->fetch(PDO::FETCH_ASSOC);
但这似乎非常低效。问题是如果我省略了"user_id" => $user_id(在第一段代码中),那么我的$sql 是无效的,因为绑定参数的数量不匹配。
解决这个问题的最佳方法是什么?
【问题讨论】:
-
你不是已经在这里问过同样的问题了吗stackoverflow.com/questions/40525986/…
-
并非如此。这是一个关于在循环数组时使用
LIKE和=条件的问题。真的完全不同。