2010-02-09 37 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')); 

啓動此查詢將導致2行,如果我綁定:dt_maj_deb:dt_maj_fin至01/01/2009和2019年1月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_deb:dt_maj_fin都綁定到同一個$value,所以當你執行它們時它們都會保持相同的日期?由於01/02/2019實際上沒有數據,因此無法返回。如果你的第二個$value=是在表中確實存在的日期,那麼你會得到正好一行,不是嗎?或者換一種說法,爲兩個oci_bind_by_name()調用使用不同的變量。

+0

謝謝亞歷克斯,我再次被oci圖書館欺騙,不是第一次......我希望這是最後一次:) – 2010-02-15 08:43:38