繁体   English   中英

带有TO_DATE SQL函数的oci_bind_by_name越野车

[英]oci_bind_by_name buggy with TO_DATE SQL function

我今天遇到一个奇怪的问题,与我在PHP中使用的oci_bind_by_name函数有关。

让我给你展示一下。

这是带有简单日期的表格:

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

如果我将:dt_maj_deb:dt_maj_fin绑定到01/01/2009和01/02/2019,则启动此查询将导致2行:dt_maj_deb例如:

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

我想念什么?

您不是将:dt_maj_deb:dt_maj_fin都绑定到相同的$value ,那么当您执行它们时,它们都将拥有相同的日期? 由于在01/02/2019上实际上没有数据,因此没有任何返回值。 如果您的第二个$value=到表中确实存在的日期,那么您将只返回一行,不是吗? 或者换一种说法,对两个oci_bind_by_name()调用使用不同的变量。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM