2013-07-12 2 views
0

Je ne suis pas sûr que ce soit un problème lié à Opencart ou seulement un problème PHP/MySQL.Opencart: la requête MySQL dans le modèle de rapports ne récupère pas les données de la base de données

En admin/model/report/test_module.php, voici ce que j'ai:

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 passé dans la fonction ci-dessus contient un tableau, quelque chose comme ceci:

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) 

Dans la base de données, les valeurs sont stockées dans ce format:

date(datetime): 2013-07-11 09:41:17 
url(text): http://localhost/oc-1.5.5.1/index.php?route=product/category&path=18 

Si je cours la requête bel OW directement dans la console SQL dans phpMyAdmin, il fonctionne très bien et me donne les lignes correctes:

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'; 

Cependant, il ne parvient pas à récupérer quoi que ce soit quand je l'essayer dans le modèle de rapport, qui fait à peu près la même chose que la Requête SQL J'ai passé des heures mais incapable de comprendre ce qui me manque. Peut-être quelque chose de trivial que je ne pouvais pas voir.

Répondre

2

La façon la plus simple de résoudre c'est de faire un var_dump($sql); sur la ligne juste avant

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

déboguer ensuite dans votre phpMyAdmin. Cela pourrait être quelque chose de trivial comme le & étant &amp; dans votre requête. Utilisez un outil de différenciation entre la requête de travail et non-travail si ce n'est pas immédiatement évident ce qui cause le problème

+0

En fait, j'avais essayé tout cela et copié cette requête SQL exacte dans PHPMyAdmin et ça marche là-bas. Mais vous avez raison sur '&' et '&'. 'var_dump ($ sql);' affiche l'URL dans ce format - 'http: //localhost/oc-1.5.5.1/index.php? route = produit/category & path = 18' dans le navigateur mais en utilisant' preg_replace' pour faire quelque chose comme ceci a résolu le problème - '$ this-> db-> escape (preg_replace ('/ & /', '&', $ data ['filter_group']))'. Merci pour le conseil. – user1448031

0

J'ai eu le même problème, après avoir passé une heure je me rends compte que je me connecte avec une base de données différente. Je veux dire mon opencart se connecter à la base de données 'DB1' mais je cours sql à la base de données 'DB2' dans phpmyadmin. C'est pourquoi je n'ai eu aucun résultat mais n'ai montré aucune erreur. Peut-être que vous l'avez testé avec une base de données différente, donc il a montré un résultat différent.

Questions connexes