mysql - Wordpress 查询不工作 - 没有错误 - 否则查询正常

标签 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() 的工作原理而言,我是否遗漏了什么?

最佳答案

如果您想要上周的订单...您为什么不简化它?不需要第二个%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/

相关文章:

python 在mysql中插入60k行的最佳方法

mysql - Mysql表的格式可以保持吗?

css - 图片在 IE 中加载,但在 Firefox 或 Chrome 中不加载

php - MySQL,删除重复行(必须由 2 列唯一)

mysql select top users问题

mysql - MySQL 中的 BLOB 和 TEXT 数据类型有什么区别?

我第一次连接到网站时没有加载 CSS

javascript - Internet Explorer (7-8-9) 似乎会从 JavaScript 中删除字符,这会破坏许多功能

wordpress - 使用 XAMPP 重定向到安装页面的现有 Wordpress 站点的本地安装

linux - 如何在 Linux 中使用 bash 脚本运行 WP-CLI