这个错误本身并不是WordPress特有的,这意味着即使您使用phpMyAdmin或MySQL命令行界面执行相同的查询,并且日期没有括在引号中,您仍然会得到相同的错误。
因此,对于字符串文字,如2021-06-01 04:00:00
(a DATETIME
literal) 在错误中,您需要将日期时间值用单引号(首选)或双引号括起来,例如。\'2021-06-01 04:00:00\'
.
因此,您的查询应该是这样的(*为简洁起见包装):
$eventQueryResults = $wpdb->get_results( "
SELECT * FROM dailyevents
WHERE dateAndTime BETWEEN \'$formattedDateRangeFrom\' AND \'$formattedDateRangeTo\'
ORDER BY dateAndTime DESC
", ARRAY_A );
这应该行得通,但现在有一个特定于WordPress的东西:通常建议使用
wpdb::prepare()
准备SQL查询以便安全执行,特别是具有动态值的查询,这些值是用户或未知源直接输入的。
因此$wpdb->prepare()
, 上述代码可以重写为:
// I know the variables store a date() value, but this is just to demonstrate
// wpdb::prepare() usage.
$query = $wpdb->prepare( "
SELECT * FROM dailyevents
WHERE dateAndTime BETWEEN %s AND %s
ORDER BY dateAndTime DESC
", $formattedDateRangeFrom, $formattedDateRangeTo );
$eventQueryResults = $wpdb->get_results( $query, ARRAY_A );
我想你可能会发现这很有帮助:
https://stackoverflow.com/questions/11321491/when-to-use-single-quotes-double-quotes-and-backticks-in-mysql :)
也针对您的评论:“引用<我不知道你可以把变量名放在引号里,并且仍然让它们引用变量“;,你当然可以,就像在回应echo "value of blah: \'$blah\'";
— 只需确保变量是可访问的,即定义的和范围内的。