sql — Query — Между оператором на PHP ADODB

У меня есть форма с двумя DatePicker (дд / мм / гггг).
Код:

<label for="from">From Date:</label>
<input type="text" id="from" name="from">
<label for="to">to Date:</label>
<input type="text" id="to" name="to">

И я пытаюсь выбрать этот диапазон данных с помощью PHP. Но есть ошибка.

Неустранимая ошибка: необработанное исключение com_exception с сообщением
Источник: Поставщик Microsoft OLE DB для ODBC
Драйверы
Описание: [Microsoft] [Драйвер ODBC Microsoft
Доступ] Типичные условия, не являющиеся критериями выражения. в
C: \ Program Files
(x86) \ EasyPHP-Devserver-16.1 \ eds-www \ DinamicoWeb \ index.php: 43 стека
трассировка: # 0 C: \ Program Files
(X86) \ EasyPHP-Devserver-16,1 \ ред-WWW \ DinamicoWeb \ index.php (43):
com-> execute (‘SELECT [Id Ord] …’) # 1 {main}, выброшенный в C: \ Program
Файлы (x86) \ EasyPHP-Devserver-16.1 \ eds-www \ DinamicoWeb \ index.php в
линия 43

Так что это мой файл php (работают отлично без даты):

$input=$_POST['input'];
$id=$_POST['id'];
$tipo=$_POST['tipo'];
$numero1=$_POST['numero1'];
$numero2=$_POST['numero2'];
$data1=$_POST['from'];
$data2=$_POST['to'];

if (empty($input)) {
$sql="SELECT [Id Ord] AS [ID], [Tipo Ord] AS [Tipo], [N Ord] AS [Numero], [Data Ord] AS [Data], [Ragione Sociale], [Indirizzo], [TotImp] AS [IMPORTO TOTALE], [TotIva] AS [IMPORTO IVA] FROM [Ordini] WHERE [Id Ord] LIKE '$id' OR [Tipo Ord] LIKE '$tipo' OR [Data Ord] BETWEEN '$data1' AND '$data2'";
} else {
$sql="SELECT [Id Ord] AS [ID], [Tipo Ord] AS [Tipo], [N Ord] AS [Numero], [Data Ord] AS [Data], [Ragione Sociale], [Indirizzo], [TotImp] AS [IMPORTO TOTALE], [TotIva] AS [IMPORTO IVA] FROM [Ordini] WHERE [Indirizzo] LIKE '%$input%' OR [Ragione Sociale] LIKE '%$input%' OR [Id Ord] LIKE '$id' OR [Tipo Ord] LIKE '$tipo'" OR [Data Ord] BETWEEN '$data1' AND '$data2'";
}

строка 43:

$rs = $con->execute($sql);

Форма: (не рассчитывать число от 1 до 100)
введите описание изображения здесь

1

Решение

Во-первых, ваш код является открытым приглашением для внедрения SQL. Вы должны использовать параметризованные запросы.

Затем, если БД MS Access, и [Data Ord] является Дата типа, в SQL вы должны окружить ваши даты # и не 'и также правильно отформатируйте их следующим образом: MM/DD/YYYY

Что-то лайк этот.

$input=$_POST['input'];
$id=$_POST['id'];
$tipo=$_POST['tipo'];
$numero1=$_POST['numero1'];
$numero2=$_POST['numero2'];
$data1=date('m/d/Y', strtotime($_POST['from']));;
$data2=date('m/d/Y', strtotime($_POST['to']));;

if (empty($input)) {
$sql="SELECT [Id Ord] AS [ID], [Tipo Ord] AS [Tipo], [N Ord] AS [Numero], [Data Ord] AS [Data], [Ragione Sociale], [Indirizzo], [TotImp] AS [IMPORTO TOTALE], [TotIva] AS [IMPORTO IVA] FROM [Ordini] WHERE [Id Ord] LIKE '$id' OR [Tipo Ord] LIKE '$tipo' OR [Data Ord] BETWEEN #$data1# AND #$data2#";
} else {
$sql="SELECT [Id Ord] AS [ID], [Tipo Ord] AS [Tipo], [N Ord] AS [Numero], [Data Ord] AS [Data], [Ragione Sociale], [Indirizzo], [TotImp] AS [IMPORTO TOTALE], [TotIva] AS [IMPORTO IVA] FROM [Ordini] WHERE [Indirizzo] LIKE '%$input%' OR [Ragione Sociale] LIKE '%$input%' OR [Id Ord] LIKE '$id' OR [Tipo Ord] LIKE '$tipo'" OR [Data Ord] BETWEEN #$data1# AND #$data2#";
}

Я понятия не имею, как форматируются ваши данные POST, поэтому вам, возможно, придется изменить способ форматирования дат.

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector