You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用WPDB执行SELECT查询无法获取两个日期范围数据如何解决

问题排查与修复方案

你当前代码存在3处核心错误,导致条件查询失效:

  • $wpdb->prepare 调用错误:ARRAY_A 是$wpdb->get_results 方法用来指定返回关联数组格式的参数,不属于prepare的入参。prepare的作用是参数绑定防SQL注入,你需要先在SQL模板中用占位符代替变量,再把变量作为prepare的后续参数传入,不能直接把变量拼接进SQL语句。
  • BETWEEN语法错误:标准SQL中BETWEEN的语法为字段 BETWEEN 值1 AND 值2,不需要额外用括号包裹两个对比值,你的写法属于非法SQL语法。
  • 日期值缺少引号:日期属于字符串类型,直接拼接进SQL时没有加单引号包裹,数据库会把2021-07-04识别为数值计算表达式(即2021减7减4),无法匹配日期字段的存储值。

正确可运行代码
global $wpdb;
$start_date = '2021-07-04';
$end_date = '2021-10-04';
$table_name = $wpdb->prefix . 'statistics_revenues';
// 用%s作为字符串占位符,参数交给prepare自动处理转义和加引号
$query = $wpdb->prepare(
    "SELECT * FROM {$table_name} WHERE DATE(date_created) BETWEEN %s AND %s",
    $start_date,
    $end_date
);
$query_results = $wpdb->get_results($query, ARRAY_A);

可选性能优化

如果你的date_created字段是datetime/timestamp类型且建有索引,建议避免用DATE()包裹字段,修改查询条件为区间判断,可触发索引提升查询速度:

$query = $wpdb->prepare(
    "SELECT * FROM {$table_name} WHERE date_created >= %s AND date_created < DATE_ADD(%s, INTERVAL 1 DAY)",
    $start_date,
    $end_date
);

内容的提问来源于stack exchange,提问作者Tsviel Zaikman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 01:36:02