wpdb::prepare()中日期与时间占位符传递的最佳实践咨询
关于wpdb::prepare()中DATE/TIME类型字段的占位符正确用法
你的示例代码里对_date(DATE类型)使用%d是不合适的,MySQL的DATE和TIME类型本质是字符串格式的日期时间值(DATE为YYYY-MM-DD,TIME为HH:MM:SS),正确的做法是统一用%s作为占位符。
修正后的代码:
wpdb->get_var( $wpdb->prepare( "SELECT count(_id) FROM " . $this->get_table_name() . " WHERE _time=%s AND _date=%s", $time, $date ) );
关键说明:
%s是wpdb::prepare专门用于处理字符串的占位符,会自动对传入的日期/时间字符串做SQL转义,既避免注入风险,又匹配MySQL DATE/TIME字段的存储格式。%d仅适用于整数类型值,用在DATE/TIME字段上会引发类型不匹配,可能导致查询结果错误或转义异常。
另外要确保传入的变量格式符合MySQL要求:
$date必须是YYYY-MM-DD格式(如2024-05-20)$time必须是HH:MM:SS格式(如14:30:00)
内容的提问来源于stack exchange,提问作者Karue Benson Karue
相关产品推荐
相关产品推荐

