我不确定这是与Opencart相关的问题,还是只是PHP/MySQL问题。
在admin/model/report/test_module.php
中,这就是我所拥有的:
class ModelReportTestModule extends Model {
public function getData($data = array()) {
$sql = "SELECT * FROM ". DB_PREFIX . "test_module";
if (!empty($data['filter_group'])) {
$sql .= " WHERE url = '" . $this->db->escape($data['filter_group']) . "'";
}
if (!empty($data['filter_date_start'])) {
$sql .= " AND date >= '" . $this->db->escape($data['filter_date_start']) . "'";
}
if (!empty($data['filter_date_end'])) {
$sql .= " AND date <= '" . $this->db->escape($data['filter_date_end']) . "'";
}
$result = $this->db->query($sql);
return $result->rows;
}
}
上面函数中传递的$data
包含一个数组,类似于以下内容:
Array ( [filter_date_start] => 2013-07-10 [filter_date_end] => 2013-07-12 [filter_group] => http://localhost/oc-1.5.5.1/index.php?route=product/category&path=18 )
在数据库中,值以以下格式存储:
date(datetime): 2013-07-11 09:41:17
url(text): http://localhost/oc-1.5.5.1/index.php?route=product/category&path=18
如果我直接在phpMyAdmin的SQL控制台中运行下面的查询,它运行良好,并为我提供了正确的行:
SELECT * FROM `oc_test_module` WHERE
`url` = 'http://localhost/oc-1.5.5.1/index.php?route=product/category&path=18' and
`date_time` >= '2013-07-10' and
`date_time` <= '2013-07-12';
然而,当我在报表模型中尝试它时,它无法检索到任何内容,而报表模型的作用与SQL查询几乎相同。我花了好几个小时,却弄不清我缺了什么。也许是我看不见的小事。
解决此问题的最简单方法是在之前的行上执行var_dump($sql);
$result = $this->db->query($sql);
然后在PHPMyAdmin中调试它。它可能是一些琐碎的东西,比如查询中的&
是&
。如果问题的原因不明显,请在工作查询和非工作查询之间使用差异工具。
我遇到了同样的问题,花了一个小时后,我发现我连接了不同的数据库。我的意思是我的opencart连接到数据库"DB1",但我在phpmyadmin中运行sql到数据库"DB2"。这就是为什么我没有得到任何结果,但没有显示出任何错误。
也许你用不同的数据库测试它,所以它显示出不同的结果。