Сравнение дат в SQLite - PullRequest
       17

Сравнение дат в SQLite

0 голосов
/ 17 ноября 2009

Как вы объявляете тип данных даты в таблице? Это просто следующее?

CREATE TABLE sampleDB (..., sampledate DATE, ...)

Теперь, если я хочу сделать запрос, используя строку через форму POST:

<?php
    $formdate = $_POST["inputname"];

    if($formdate) {
        echo "Searching using query: ".$formdate."<br>";
        $db = new SQLiteDatabase("testDB.db");
        $query = $db->query("SELECT * FROM sampleDB WHERE sampledate = ".$formdate);
        while($entry = $query->fetch(SQLITE_ASSOC)) {
            echo "result: " ... "<br>";
        }
    }
?>

Это не похоже на работу. Он не возвращает запись, которую я хочу.

Когда я сохраняю дату как строку и сравниваю строки, все хорошо, но если SQLite имеет тип данных DATE, я думаю, что должен быть способ использовать его!

1 Ответ

5 голосов
/ 17 ноября 2009

В опубликованном вами коде есть уязвимость, которая позволяет любому пользователю легко вводить произвольные команды SQL. Два распространенных способа исправить это: (1) очистка ввода и (2) использование API, который отделяет команды от (возможно, ненадежных) аргументов. Для (1) я бы искал специфичные для SQL escape-функции в документации PHP. Хорошо известным примером для (2) является DBI Perl. (Я не знаю, есть ли подобная библиотека для PHP.)

В SQLite нет типа даты или времени. Если у вас уже есть строки даты в базе данных, вы должны убедиться, что они последовательно отформатированы. Функции даты и времени из руководства по SQLite перечисляет некоторые функции, которые могут пригодиться для ваших запросов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...