对不起,我的英语不好。我认为如果我把我的代码放在这里会更容易。所以这是我尝试过的:
//这是工作
$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。
非常感谢你。
这在 php 7.4、Oci8/Oracle 19c 数据库上对我有用。(我从来没有在 php 上工作过,只是在这里和那里搜索了一下)
$sql = "SELECT ename FROM emp WHERE hiredate > TO_DATE(:hdate,'YYYY-MM-DD')";
$stid = oci_parse($conn, $sql);
$hdate = "1980-01-01";
oci_bind_by_name($stid,':hdate', $hdate);
// oci_bind_by_name($stid,":hdate", $hdate); //this line also works i.e double quotes
编辑:- IN 子句也适用于我。这是我学到的,你不能在 OCI_BIND 中传递文字值,我首先将文字分配给一个变量
$sql = "SELECT ename FROM emp WHERE job IN (:job1,:job2)";
$stid = oci_parse($conn, $sql);
$job1 ='CLERK';
$job2 = 'SALESMAN';
oci_bind_by_name($stid,':job1', $job1);
oci_bind_by_name($stid,':job2',$job2);
oci_execute($stid);
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句