MySQL 查询:SQL 的变量值不起作用

MySQL query: variable value for SQL does not work

我做了一些检索数据的函数。

查询结果必须取决于输入值。 输入值在变量 $start & $end.

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

表示变量$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();
   }

然后我把代码改成fix值,果然不出所料

   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 没有在您的查询字符串中展开。将您的查询字符串分配给变量并打印出来进行确认。也就是说,使用 bind 变量而不是内插字符串:

      $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]);