TO_DATE SQL fonksiyonu ile oci_bind_by_name buggy

1 Cevap php

Ben garip bir meseleyi ben PHP kullanmak oci_bind_by_name fonksiyonuna bağlı bugün sahip.

Sana bir vitrin vereyim.

Burada basit tarihleri ​​ile bir tablo:

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

I :dt_maj_deb ve :dt_maj_fin 01/01/2009 ve örneğin 2019/01/02 bağlanan bu sorguyu başlatıyor 2 satır neden olur:

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

Yani her şeyi biz beklediğiniz gibi değildir. Ben PHP aynı sorguyu başlatmak istiyorum Benim husustur. İşte benim test kodu:

$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) {}
}

Ne eksik?

1 Cevap

Eğer her iki :dt_maj_deb ve :dt_maj_fin bağlayıcı değildir aynı yürütmek zaman $value, bu yüzden ikisi de aynı tarih tutacağım? Hiçbir veri 2019/01/02 üzerinde aslında olduğu gibi geri dönmek için hiçbir şey yoktur. İkinci $value= tablosunda mevcut mu bir tarih ise o zaman tam bir satır geri almak istiyorum, değil mi? Veya, başka bir deyişle iki oci_bind_by_name() çağrıları için farklı değişkenleri kullanın.