我不確定這是Opencart相關問題還是PHP/MySQL問題。Opencart:在報告模型中的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
如果我運行查詢bel ow的直接在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查詢。我花了幾個小時,但無法弄清楚我錯過了什麼。也許是我無法看到的一些微不足道的東西。
其實我已經嘗試了所有這些,並將精確的SQL查詢複製到PHPMyAdmin中,並且它在那裏工作。但是你對'&'和'&'說得對。 'var_dump($ sql);'在瀏覽器中顯示這種格式的URL - 'http://localhost/oc-1.5.5.1/index.php?route = product/category&path = 18',但使用'preg_replace'來做像這樣的東西解決了這個問題 - '$ this-> db-> escape(preg_replace('/ & /','&',$ data ['filter_group']))''。謝謝你的提示。 – user1448031