无法比较 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);
我正在使用 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);