РЕДАКТИРОВАТЬ - КОД НИЖЕ ПОКАЗЫВАЕТ ИСПРАВЛЕНИЯ
Мне нужно создать функцию поиска, которая будет искать в базе данных SQLite определенный диапазон дат.
Например:
Пока у меня есть:
if (!empty($_POST)) {
$sql = "SELECT * from table where record_date between date('now') and date('now', :record_date||' days')";
$stmt = $db->prepare($sql);
$stmt->bindValue(':record_date' , '%'.$webdata['record_date'].'%', SQLITE3_TEXT);
$result = $stmt->execute();
while ($row = $result->fetchArray()) {
echo '<p>' . htmlspecialchars($row['id']) . " : " .
htmlspecialchars($row['record_date']).'</p>';
}
}
?>
Похоже, это не приносит никаких результатов.
Если я использую SqliteOnline.com для запроса базы данных, это нормально работает с запросом:
SELECT * from table where record_date between date('now') and date('now', '7 days')
Как сказал @ Don'tPanic, у вас как минимум синтаксическая ошибка. Строка, начинающаяся с $sql = "SELECT * from, не имеет закрывающих двойных кавычек для начинающих.
Мой исходный код содержит заключительную цитату. Это была опечатка, теперь вопрос исправлен. По-прежнему нет результата ..






Закройте котировки $ sql = "ВЫБРАТЬ * из таблицы, где record_date между date ('now') и date ('now', ': record_date days');"
Мой исходный код содержит заключительную цитату. Это была опечатка, теперь вопрос исправлен. По-прежнему нет результата ..
Именованные заполнители не следует заключать в кавычки, поскольку в этом случае они интерпретируются как буквальное значение.
Попробуйте изменить:
date('now', ':record_date days')
к:
date('now', :record_date||' days')
Вам также необходимо изменить следующее из:
$stmt->bindValue(':record_date' , '%'.$webdata['record_date'].'%', SQLITE3_TEXT);
к:
$stmt->bindValue(':record_date' , $webdata['record_date'], SQLITE3_TEXT);
Это отлично работает как запрос и дает результаты. Однако он не дает никаких результатов с моими функциями поиска.
Там синтаксическая ошибка. Слишком много красного кода, поэтому, скорее всего, где-то отсутствует закрывающая цитата