Wordpress查询不起作用 - 没有错误 - 否则查询正常

时间:2012-12-29 00:48:06

标签: mysql wordpress

我有一个$ 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()如何运作,我有什么遗漏?

1 个答案:

答案 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并始终测试整数,如图所示。