【问题标题】:Different MySQL Query Result in Localhost and Online Server本地主机和在线服务器中不同的 MySQL 查询结果
【发布时间】:2015-12-09 11:46:55
【问题描述】:

我有这个查询在本地主机上工作:

$clicks = $wpdb->get_results(
    "SELECT * 
    FROM {$wpdb->prefix}data
    WHERE date BETWEEN ( NOW() - INTERVAL {$args['day']} DAY ) AND NOW()
    {$where}
    ORDER BY {$args['order_by']} {$args['order']}
    LIMIT {$args['data_per_page']} OFFSET {$offset}",

    ARRAY_A
);

$clicks 返回预期的结果数组。

我的本​​地主机使用 XAMPP 1.8.3,它使用 PHP 5.5.11 和 5.6.16(基于 this)。

当我在在线服务器上测试它时(我使用带有 PHP 5.4.45 和 MySQL 5.5.42 的 Hostgator),$click 返回空数组。

没有语法错误警告或任何警告,所以我很困惑。

是语法问题吗?调试 MySQL 查询的最佳实践是什么?

【问题讨论】:

  • $wpdb 使用哪些类?它看起来像 pdo。你的凭据还好吗?
  • 这是一个访问 DB:codex.wordpress.org/Class_Reference/wpdb 的 WordPress 类。我的凭据很好。其他查询正常执行。只有这个查询有问题。
  • 所以您使用 wordpress,我假设您不能使用我提供的 php 错误报告选项,但是您可以在调试模式下运行 wordpress 吗? stackoverflow.com/q/1080679/3664960
  • 是的,我从一开始就一直在打开 wp 调试,但我没有看到任何错误。我认为查询很好,因为它在本地主机上正常执行,但不是在线服务器。可能是因为 MySQL 版本不同?
  • 您是否尝试在 MySQL 客户端、phpMyAdmin 或其他任何东西上运行查询? (在目标服务器上,替换您需要的值)。另外,如果查询运行正常,请尝试继续查询真正运行的源代码并将代码更改为仅打印查询并退出,可能是参数填写错误。

标签: php mysql


【解决方案1】:

我使用 UTC 时区将日期存储在数据库中。但是在线服务器使用 CST 时区。因此,我没有使用NOW(),而是使用PHP time() 定义了一个新的$date 变量,并将查询中的NOW() 替换为如下变量:

    $date = date( 'Y-m-d', time() );

    global $wpdb;
    $clicks = $wpdb->get_results(
        "SELECT * 
        FROM {$wpdb->prefix}data
        WHERE DATE(date) BETWEEN ( {$date} - INTERVAL {$args['day']} DAY ) AND {$date}
        {$where}
        ORDER BY {$args['order_by']} {$args['order']}
        LIMIT $args['data_per_page'] OFFSET {$offset}",

        ARRAY_A
    );

所以现在查询总是在 localhost 和在线服务器中返回相同的结果。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-01-31
    • 1970-01-01
    • 2015-06-12
    • 2014-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多