web-dev-qa-db-fra.com

Aucune erreur de syntaxe et Query fonctionne sans un paramètre

La requête suivante ne retournera aucun résultat ...

if (empty($from_date)) {
    $from_date = 2000-01-01;
}
if (empty($to_date)) {
    $to_date = 3000-01-01;
}
if (empty($_POST['supervisor'])) {
    $_POST['supervisor'] = "%";
}
$query
    ->select(array('id', 'job_date', 'emp_name', 'super', 'qty_jobs', 'job_id', 'job_name', 'qty_measure', 'qty_install', 'qty_shop', 'qty_misc'))
    ->from($db->quoteName('admin_service_reports'))
    ->where(($db->quoteName('job_date') . ' >= ' . $db->quote($from_date).' AND '.$db->quoteName('job_date') . ' <= ' . $db->quote($to_date)).' AND '.$db->quoteName('emp_name').' LIKE "'.$_POST['employee'].'"')
    ->order('id DESC');

Mais si je supprime la comparaison des employés dans la partie où, comme ...

$query
    ->select(array('id', 'job_date', 'emp_name', 'super', 'qty_jobs', 'job_id', 'job_name', 'qty_measure', 'qty_install', 'qty_shop', 'qty_misc'))
    ->from($db->quoteName('admin_service_reports'))
    ->where(($db->quoteName('job_date') . ' >= ' . $db->quote($from_date).' AND '.$db->quoteName('job_date') . ' <= ' . $db->quote($to_date)).'')
    ->order('id DESC');

Ça fonctionne bien.

J'ai essayé d'utiliser des parenthèses et des dizaines d'autres choses et il ne retournera tout simplement pas de lignes. Je me demandais si quelqu'un voyait quelque chose que je n'avais pas vu au cours des 5 dernières heures. Je ne sais pas si c'est assez d'informations pour résoudre même. Je suis sur le point de supprimer le code JDatabase ici et d'utiliser PHP/MySQL standard.

1
tim92109

La clausule semblable est incorrecte. Au lieu de

LIKE "'.$_POST['employee'].'"

CA devrait etre

LIKE "%'.$_POST['employee'].'%"

Notez le% entourant votre texte.

En passant, ce n’est pas une bonne pratique d’injecter des globales telles que $ _POST ou $ _GET dans les requêtes car cela produit un code vulnérable à l’injection SQL. Vous feriez mieux d’obtenir des données de publication via JInputclass et, comme vous l’avez fait auparavant, de citer et d’échapper ces données avec $db->quote($posted_data, true);

0
Pep Lainez