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.
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