【发布时间】:2020-09-04 04:18:51
【问题描述】:
对不起,我的英语不好。我认为如果我把我的代码放在这里会更容易。所以这是我尝试过的:
//这是有效的
$sql = "select ID, NAME, BDATE from EMPLOYEES where BDATE >= DATE '2020-01-01'";
//但是当我尝试这样做时,它失败了:
$sql = "select ID, NAME, BDATE from EMPLOYEES where BDATE >= DATE :bdate"; //this is
$compiled = oci_parse($conn, $sql);
oci_bind_by_name($compiled, ":bdate", "2020-01-01");
上面会引发这个错误:
"code":936,"message":"ORA-00936: 缺少表达式"
我尝试过其他类似的方法:
//失败
$sql = "select ID, NAME, BDATE from EMPLOYEES where BDATE >= TO_DATE(:bdate, 'YYYY-MM-DD')";
oci_bind_by_name($conn, ':bdate', '2020-01-01');
上面会引发这个错误:
"code":1847,"message":"ORA-01847: 日期必须介于 1 和 一个月的最后一天”
//当我放入 DATE、TO_DATE、UPPER 等函数时总是失败
$sql = "select ID, NAME, BDATE, STATUS from EMPLOYEES where upper(STATUS) = upper(:status)";
//In 子句中的事件也会失败
$sql = "select ID, NAME, BDATE, STATUS from EMPLOYEES where upper(STATUS) in (:status1, :status2)";
oci_bind_by_name($compiled, ":status1", "SINGLE");
oci_bind_by_name($compiled, ":status2", "MARRIED");
谁能告诉我如何解决这个问题? 我遵循了文档中的许多教程,以及另一个 stackoverflow 答案。但没有任何效果。
或者是我错过了在我的网络服务器上设置的东西吗?还是在我的数据库服务器上?
仅供参考,我使用的是 PHP7.2、OCI8、Oracle 11g。
非常感谢。
【问题讨论】:
-
不确定,但尝试在变量中设置值 -
$date = "2020-01-01";,然后将变量放入绑定oci_bind_by_name($compiled, ":bdate", $date); -
谢谢。我已经做到了。我事件直接将其放入 oci_bind_by_name 中,不带变量。像这样:oci_bind_by_name($conn, ':bdate', '2020-01-01');
标签: php oracle oracle11g oracle-call-interface