我有一个$ wpdb查询我正在尝试执行,但它没有通过并且没有抛出任何错误:
$followups =
$wpdb->get_results(
$wpdb->prepare(
"SELECT * FROM orders
WHERE status_id = %d
AND DATEDIFF(CURDATE(), date_waiting_pickup) % 7 = %d",
array(66, 0)
)
);
知道为什么吗?它在终端/直接MySQL中运行良好。是DIFFDATE()
函数吗?
编辑:有趣的是,如果我删除$wpdb->prepare
函数,并离开$wpdb->get_results()
,它就可以了。那么$wpdb->prepare()
如何运作,我有什么遗漏?
答案 0 :(得分:0)
如果您想要的话,在上周订购 ...为什么不简化它?第二个%d
不需要放0。
$followups =
$wpdb->get_results(
$wpdb->prepare(
"SELECT * FROM orders
WHERE status_id = %d
AND DATEDIFF(CURDATE(), date_waiting_pickup) % 7 = 0",
66
)
);
<强>更新强>:
@dtj您正在使用mod
(%)运算符来为我们提供除法的其余部分。因此,与0
(我的第一个假设)相比,我们从今天,1周前,2周前等获得订单。如果我们与1比较(在第二个%d
)我们昨天获得订单,8天前等...
真的是你想要的吗?
更新2 :在您编辑的问题中,您说删除$wpdb->prepare()
一切正常。毫无疑问是有趣的,但幸运的是,如果你只使用整数,你真的不需要prepare()
。我的意思是:
$status_id = (int) (is_numeric($status_id) ? $status_id : 0);
$followups = $wpdb->get_results("
SELECT * FROM orders
WHERE status_id = $status_id
AND DATEDIFF(CURDATE(), date_waiting_pickup) % 7 = 0");
您确保安全查询并获得简单性和效率。在我的情况下,如果涉及prepare()
,我只使用strings
并始终测试整数,如图所示。