Ошибка oci_bind_by_name с функцией TO_DATE SQL - PullRequest
1 голос
/ 09 февраля 2010

У меня сегодня странная проблема, связанная с функцией oci_bind_by_name, которую я использую в PHP.

Позвольте мне дать вам витрину.

Вот таблица с простыми датами:

create table test(col1 date);
insert into test values(to_date('01/01/2009','DD/MM/YYYY'));
insert into test values(to_date('01/01/2019','DD/MM/YYYY'));
insert into test values(to_date('01/01/2029','DD/MM/YYYY'));
insert into test values(to_date('01/01/2039','DD/MM/YYYY'));

Запуск этого запроса приведет к 2 строкам, если я свяжу :dt_maj_deb и :dt_maj_fin с 01.01.2009 и 01.02.2009, например:

SELECT * 
FROM TEST 
WHERE col1 BETWEEN TO_DATE (:dt_maj_deb, 'DD/MM/YYYY') 
               AND TO_DATE (:dt_maj_fin, 'DD/MM/YYYY')

Results
-------
01.01.2009          
01.01.2019

Так что все так, как мы можем ожидать. Меня беспокоит, когда я хочу запустить тот же запрос из PHP. Вот мой тестовый код:

$query = "SELECT * FROM TEST 
          WHERE col1 BETWEEN TO_DATE (:dt_maj_deb, 'DD/MM/YYYY')
                         AND TO_DATE (:dt_maj_fin, 'DD/MM/YYYY')";
$stmt = oci_parse($conn,$query);
$value = '01/01/2009';
oci_bind_by_name($stmt,':dt_maj_deb',$value);
$value = '01/02/2019';
oci_bind_by_name($stmt,':dt_maj_fin',$value);
oci_execute($stmt);
oci_fetch_all($stmt, $result);
var_dump($result);
oci_free_statement($stmt);
oci_close($conn);

Results
-------
array(1) {
    ["COL1"]=>
       array(0) {}
}

Что мне не хватает ??

1 Ответ

1 голос
/ 12 февраля 2010

Разве вы не привязываете и :dt_maj_deb, и :dt_maj_fin к одному и тому же $value, поэтому при выполнении они будут содержать одну и ту же дату? Поскольку нет данных на 01.02.2009, возвращать нечего. Если бы ваш второй $value= был к дате, которая существует в таблице, вы бы вернули ровно одну строку назад, не так ли? Или, другими словами, используйте разные переменные для двух вызовов oci_bind_by_name().

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