今天我遇到一个奇怪的问题,与我在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行:
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) {}
}
我错过了什么?
答案 0 :(得分:1)
您是不是将:dt_maj_deb
和:dt_maj_fin
绑定到同一$value
,所以当您执行时,它们都会保持相同的日期?由于在01/02/2019实际上没有数据,因此无法返回。如果您的第二个$value=
到达表中确实存在的日期,那么您将获得一行,不是吗?或者,换句话说,为两个oci_bind_by_name()
调用使用不同的变量。