我有一个要执行的 $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()
的工作原理而言,我是否遗漏了什么?
最佳答案
如果您想要上周的订单...您为什么不简化它?不需要第二个%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");
您可以确保安全查询并获得简单性和效率。在我的例子中,如果有 strings
涉及,我只使用 prepare()
并且总是测试整数,如图所示。
关于mysql - Wordpress 查询不工作 - 没有错误 - 否则查询正常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14077637/