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