无法在SQL语句中比较日期

时间:2015-01-20 11:08:38

标签: php mysqli

我正在使用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之间的空格推迟。

3 个答案:

答案 0 :(得分:1)

你使用反引号作为查询变量而不是单引号,所以尝试从值($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");

答案 1 :(得分:0)

names of database objects(数据库,表,字段,索引,触发器a.s.o.)包含在反引号(``)中。这通常是不需要的,但当名称是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

上面查询中的所有字段名称都不是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");

答案 2 :(得分:0)

问题主要是这个班级不允许

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