无法比较 SQL 语句中的日期


Cannot compare date in SQL statement

我正在使用Joshcam的PHP Mysqli数据库类(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 之间的空格推迟。

您正在对查询变量使用反引号而不是单引号,因此请尝试从 value( $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");

将数据库对象(数据库、表、字段、索引、触发器 a.s.o.) 的名称括在反引号 ( `` 中)。这通常不是必需的,但是当名称是MySQL保留字时,它很有用(阅读"必需")。

将字符串文字括在撇号 ( '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

上述查询中的任何字段名称都不是 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");

问题主要是这个类不允许

WHERE the_date > $date1
AND the_date < $date2

我实际上不得不使用两者来解决它。我的最终代码:

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