Я потратил 2 дня, пытаясь это исправить - мои сравнения дат в MySQL не работают, когда я пытаюсь связать значения с оператором <=
меньше или равно.
Я сузил его до второго поля даты (из гораздо более сложного скрипта, который изменяет подготовленный оператор, присоединяет / groups / fields / условий в зависимости от запроса ... вот почему я ссылаюсь на таблицу. столбец и выбор только из одной таблицы ниже - это работает в любом случае), но я не могу понять это. Точный код, используемый для работы с php 5.x, но я только что обновился до php7 .2.27.
Возьмите приведенное ниже выражение SQL:
$sth = $this->prepare("SELECT
transaction.transactionid,
transaction.accountid,
transaction.userid,
transaction.billdate,
transaction.amount,
transaction.description,
transaction.confirmed
FROM transaction
WHERE
DATE(`billdate`) BETWEEN :startdate AND :enddate #date('2020-03-12')
ORDER BY billdate desc");
Попытка привязать к нему следующее:
$terms = array(':startdate' => "2000-01-01",':enddate' => "2020-03-12");
foreach ($terms as $key => $value) {
if($value == (int)$value)
$sth->bindValue("$key", $value, PDO::PARAM_INT);
else
$sth->bindValue("$key", $value);
}
var_dump($sth);
var_dump($terms);
$sth->execute();
$this->rowCount = $sth->rowCount();
var_dump( $sth->fetchAll(PDO::FETCH_ASSOC));
Возвращает пустой массив.
Таблица содержит несколько тестовых строк. Ниже приведено правильное значение:
...
DATE(`billdate`) BETWEEN :startdate AND '2020-03-12'
ORDER BY billdate desc
Перенос даты в date('date')
, похоже, не имеет значения.
Я тоже пробовал это ...
DATE(`billdate`) >= :startdate AND
DATE(`billdate`) <= '2020-03-12'
ORDER BY billdate desc
");
(Конечно, изменяя связанные термины, чтобы они отражали то, что я использую)
Мне нужно иметь возможность связывать обе переменные.
Благодарен за любые указатели, которых я бы хотел избежать тратить еще один день на отладку этого! Спасибо