2013-07-12 44 views
0

我不確定這是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查詢。我花了幾個小時,但無法弄清楚我錯過了什麼。也許是我無法看到的一些微不足道的東西。

回答

2

解決這個最簡單的方法就是之前

$result = $this->db->query($sql); 

做就行了var_dump($sql);然後在你的phpMyAdmin調試。這可能是一些微不足道的事情,例如在您的查詢中&&amp;。使用差異工具之間的工作和非工作查詢如果它不是立即明顯是什麼造成的問題

+0

其實我已經嘗試了所有這些,並將精確的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

0

我有同樣的問題,我花了一個小時後,我知道我連接不同的數據庫。我的意思是我的opencart連接到數據庫'DB1',但我在phpmyadmin中運行sql到數據庫'DB2'。這就是爲什麼我沒有得到任何結果,但沒有顯示任何錯誤。

也許你用不同的數據庫測試它,結果表現出不同的結果。