MySQL'之间'日期未使用PHP(和Codeigniter)选择正确的结果

时间:2010-10-19 22:49:07

标签: php mysql

这是我的代码(使用CodeIgniter):

$now = date('Y-m-d');

$then = strtotime($now . '-1 week');

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

$q3 = $this->db->query("SELECT * 
                          FROM posts 
                         WHERE publish_date BETWEEN '$then' AND '$now'");

$data['posts_today'] = $q3->num_rows();

本周我显然已经发布了至少20篇帖子,但它只显示“1”。有什么想法吗?

谢谢!

3 个答案:

答案 0 :(得分:0)

这适合你吗?

$q3 = $this->db->query("SELECT * 
                          FROM posts 
                         WHERE publish_date BETWEEN DATE_SUB(NOW(), INTERVAL 1 WEEK) 
                                                AND NOW()");

我看到的潜在问题:

  • POSTS.publish_date DATETIME数据类型吗?
  • 如果PHP和MySQL在不同的主机上,那么来自codeigniter / PHP的NOW可能与MySQL中存储/使用的时间不同。

答案 1 :(得分:0)

验证MySQL是否期望采用该格式的日期。你可能最好使用MySQL的日期函数来组合它们。

答案 2 :(得分:0)

首先,将所有内容卸载到MySQL。你必须做的日期越少,数学就越好。

其次,看看你实际创建的代码是什么样的。改变这个

$q3 = $this->db->query("SELECT * 
                      FROM posts 
                     WHERE publish_date BETWEEN '$then' AND '$now'");

到这个

$sql = "SELECT * 
                      FROM posts 
                     WHERE publish_date BETWEEN '$then' AND '$now'");
print "EXECUTING: $sql\n";
$q3 = $this->db->query( $sql );

您假设您生成的SQL有效,而且可能不是。当您使用一种语言在另一种语言中生成代码时,这种情况非常常见。始终print来验证您的假设。