我有这个查询适用于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查询的最佳做法是什么?
答案 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和在线服务器上返回相同的结果。