web-dev-qa-db-ja.com

構文エラーはなく、クエリは1つのパラメーターなしで機能します

次のクエリは結果を返しません...

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

しかし、where部分の従業員比較を削除すると...

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

正常に動作します。

かっこなどを使用してみましたが、行が返されません。私が過去5時間以内に見たことのないものを誰かが見ているのではないかと思っています。これでもトラブルシューティングに十分な情報かどうかはわかりません。ここでJDatabaseコードを破棄し、標準のPHP/MySQLを使用している限り、私はフェンスのそばにいます。

1
tim92109

Like clausuleは正しくありません。の代わりに

_LIKE "'.$_POST['employee'].'"_

そのはず

_LIKE "%'.$_POST['employee'].'%"_

テキストを囲んでいる%に注意してください。

ちなみに、$ _ POSTや$ _GETなどのグローバルをクエリに挿入することは、SQLインジェクションの脆弱なコードを生成するため、お勧めできません。 JInputclassを介して投稿データを取得し、以前と同様に、このデータを$db->quote($posted_data, true);で引用してエスケープします。

0
Pep Lainez