无法比较 SQL 语句中的日期

Cannot compare date in SQL statement

我正在使用 Joshcam 的 PHP Mysqli 数据库 Class (github) 并且一直在为比较日期而斗争很长一段时间。 底线是任何人都可以解释此错误消息:

PHP Fatal error:  Problem preparing query (SELECT * FROM jobs WHERE business_id = 5 AND active = 1 AND date_visit > `2015-01-01 05:02:14` ORDER BY date_appt DESC) Unknown column '2015-01-01 05:02:14' in 'where clause'

我的查询是:

$jobs = $db->rawQuery("SELECT * FROM jobs WHERE business_id = $business_id AND active = 1 AND date_visit > `".$search_from."` ORDER BY date_appt DESC");

为什么我的日期输入会被视为列而不是字段值?

我试过双引号、单引号、无引号,它要么将引号变成 ' 要么被 Y-m-d 和 H:i:s 之间的 space 推迟。

您正在为查询变量使用反引号而不是单引号,因此请尝试从值 ($search_from) 中删除反引号,否则它将被视为列

$jobs = $db->rawQuery("SELECT * FROM jobs WHERE business_id = '$business_id' AND active = 1 AND date_visit > '$search_from' ORDER BY date_appt DESC");

names of database objects (databases, tables, fields, indexes, triggers a.s.o.) in backquotes (``). This is usually not needed but it is useful (read "required") when the name is a MySQL reserved word 括起来。

string literals 括在撇号 ('2015-01-01 05:02:14') 或引号 ("2015-01-01 05:02:14") 中:

SELECT *
FROM `jobs`
WHERE `business_id` = 5
  AND `active` = 1
  AND `date_visit` > '2015-01-01 05:02:14'
ORDER BY `date_appt` DESC
上面查询中的字段名

None是MySQL关键字,不需要用反引号括起来。我这样做只是为了说明目的。

您的 PHP 代码应为:

$jobs = $db->rawQuery("SELECT * FROM jobs WHERE business_id = $business_id AND active = 1 AND date_visit > '".$search_from."' ORDER BY date_appt DESC");

问题主要是 class 不允许

WHERE the_date > $date1
AND the_date < $date2

其实我不得不用between来解决。 我的最终代码:

$params = array($business_id,1,$search_from,$search_to,$limit_end);
$jobs = $db->rawQuery("SELECT * FROM jobs WHERE business_id = ? AND active = ? AND date_visit BETWEEN ? AND ? ORDER BY date_appt DESC, id DESC LIMIT ?",$params,false);