Localhost和Online Server中不同的MySQL查询结果

时间:2015-12-06 02:27:03

标签: php mysql

我有这个查询适用于localhost:

$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返回预期的结果数组。

我的localhost使用XAMPP 1.8.3,它使用PHP 5.5.11和5.6.16(基于this)。

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

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

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

1 个答案:

答案 0 :(得分:1)

我使用UTC时区将日期存储在数据库中。但是在线服务器使用CST时区。因此,我使用PHP $date而不是time()来定义新的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 ); 替换为如下变量:

list_of_ids = [1,2,3]
s_date = '2015-01-01'

cursor.execute("""
   SELECT * FROM foo WHERE id IN (%s)
   AND start_date=%s
   """, (list_of_ids,s_date))

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