2010-02-09 3 views
0

PHP에서 사용하는 oci_bind_by_name 함수와 관련된 이상한 문제가 있습니다.oci_bind_by_name TO_DATE SQL 함수가 포함 된 버그

쇼케이스를 알려 드리겠습니다.

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')); 

내가 예를 들어 2009년 1월 1일 및 2019년 1월 2일에 :dt_maj_deb:dt_maj_fin을 결합하면이 쿼리가 2 개 행에 발생합니다 시작 :

여기

간단한 날짜와 테이블
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

:dt_maj_fin을 모두 $value에 바인딩하지 않으므로 실행시 둘 다 동일한 날짜를 유지하게됩니까? 01/02/2019에 실제로 데이터가 없으므로 반환 할 것이 없습니다. 두 번째 $value=이 테이블에있는 날짜에 있었다면 정확히 한 행을 다시 얻을 수 있습니다. 그렇지 않습니까? 또는 다른 방법으로 말하면 두 개의 oci_bind_by_name() 호출에 대해 서로 다른 변수를 사용하십시오.

+0

Alex에게 다시 한번, 나는 처음으로 oci 라이브러리에 속아 넘어졌다 ... 나는 그것이 마지막 이었으면 좋겠다. :) –

관련 문제