MySQL query: SQL的变量值不起作用



我编写了一些用于检索数据的函数。

查询结果必须依赖于输入值。输入值在变量$start & $end中。

但是我的代码返回的不是基于输入值的所有数据。

表示变量$start & $end没有值(reader null)。

function tryme($start, $end) {
$query = $this->db->query("
SELECT b.liId, r.status
FROM raws r
LEFT JOIN books b ON r.rawsId = b.booksId
GROUP BY b.booksId 
HAVING 
SUM((b.start < '$start' AND b.done < '$start') 
OR 
(b.start > '$end' AND b.done > '$end')) = COUNT(*)
");
return $query->result_array();
}

然后我用固定值更改代码,结果如预期的那样。

HAVING 
SUM((b.start < '18-04-2022' AND b.done < '18-04-2022') 
OR 
(b.start > '19-04-2022' AND b.done > '19-04-2022')) = COUNT(*)
");

那么错误是什么,如何使用变量?

您的变量$start$end没有在您的查询字符串中展开。将查询字符串分配给变量并打印出来以确认。也就是说,使用绑定变量而不是插入字符串:

$query = $this->db->query("
SELECT b.liId, r.status
FROM raws r
LEFT JOIN books b ON r.rawsId = b.booksId
GROUP BY b.booksId 
HAVING SUM((b.start < ? AND b.done < ?) OR
(b.start > ? AND b.done > ?)) = COUNT(*)
", [$start, $start, $end, $end]);

最新更新