对不起,我的英语不好。我认为将代码放在这里会更容易。所以这是我尝试过的:
//这正在工作
$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");
以上将引发此错误:
“代码”:936,“消息”:“ ORA-00936:缺少表达式”
我尝试过其他类似的东西:
//失败
$sql = "select ID, NAME, BDATE from EMPLOYEES where BDATE >= TO_DATE(:bdate, 'YYYY-MM-DD')";
以上将引发此错误:
“代码”:1847,“消息”:“ ORA-01847:月份中的日期必须在1到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答案。但没有任何效果。
或者也许我错过了在Web服务器上设置的某些内容?还是在我的数据库服务器上?
Fyi,我正在使用PHP7.2,OCI8,Oracle 11g。
非常感谢。
这应该起作用:
where BDATE >= TO_DATE(:bdate, 'YYYY-MM-DD')
但仅当您以完全提供的日期值与您指定的格式相同:YYYY-MM-DD
。您收到的错误:
ORA-01847:月份的日期必须在1到月份的最后一天之间
表示您提供了2020-18-05
之类的东西,即“今天”,但格式为YYYY-DD-MM
。正如Oracle期望的那样,YYYY-MM-DD
并且我们的日历中没有18月,它引发了一个错误。