Php PL/SQL查询没有结果,但应该有。

Php PL/SQL查询没有结果,但应该有。,php,sql,oracle,plsql,Php,Sql,Oracle,Plsql,我知道关于这个错误有几个问题,php也是如此。 我已经尝试了大部分答案,但似乎没有任何效果 这是我的疑问: "select id, employeenr, name, section, description, duration, to_date(substr(startdate,0,12)||' '||starttime, 'DD-MM-YYYY HH24:MI:SS') starttime, to_date(substr(end

我知道关于这个错误有几个问题,php也是如此。
我已经尝试了大部分答案,但似乎没有任何效果

这是我的疑问:

"select
    id,
    employeenr,
    name,
    section,
    description,
    duration,
    to_date(substr(startdate,0,12)||' '||starttime, 'DD-MM-YYYY HH24:MI:SS') starttime,
    to_date(substr(enddate,0,12)||' '||endtime, 'DD-MM-YYYY HH24:MI:SS') endtime,
    worktime,
    statement,
    remark
    from
    data
    where   1=1
    ".$vw."
    AND startdate between to_date(':df 00:00:00', 'DD-MM-YYYY HH24:MI:SS') and to_date(':dt 23:59:59', 'DD-MM-YYYY HH24:MI:SS')
    ".$vw1."
    order by nvl(employeenr,0), startdate";
$parameters = array(':df' => $date_from, ':dt' => $date_to);
Echo var vw:

AND ( employeenr between '100000' and '199999'OR employeenr between '400000' and '499999'OR employeenr between '700000' and '799999'OR (employeenr is not null AND employeenr between '100000' and '199999'OR employeenr between '400000' and '499999'OR employeenr between '700000' and '799999'))
$date\u from和$date\u to:

$date_from = $_POST["date_from"]; // jQuery datepicker value
$date_to = $_POST["date_to"]; // jQuery datepicker value

我做错了什么?

以后如何使用
$Parameters
?看起来您希望将其用作绑定变量数组,以便稍后传递给Oracle。如果是这样的话,那么就不能正确地使用它,因为字符串中包含的不是变量的值,而是SQL。这不是绑定变量在Oracle中的工作方式

您必须为Oracle提供一个完整的查询进行分析,只有查询中的值可以是未知的(日期、数字或字符串)。这些你可以稍后通过。不能解析半个查询,以后在变量中添加更多SQL


所以不能解析
和?
,因为这里没有任何值。另一方面,类似于
和X=?
的内容可以被解析,因为Oracle希望在稍后执行查询时获得用于比较X列的值。

新问题,新答案

尽管如此,您仍然不会将绑定变量用于变量(日期、数字或字符串),而是尝试用它替换字符串的一部分。这不管用

':df 00:00:00'
是一个包含冒号的字符串,后跟“d”和“f”等

对完整字符串使用绑定变量,即:

AND startdate >= to_date(:date_from, 'DD-MM-YYYY')
AND startdate < to_date(:date_to, 'DD-MM-YYYY') + 1


解决方案

我已经能够通过剥离查询的SELECT区域中的substr来修复我的问题

$sql_report = "
        select
        id,
        employeenr,
        name,
        section,
        description,
        duration,
        startdate,
        starttime,
        enddate,
        endtime,
        worktime,
        statement,
        remark
        from
        data
        where   1=1
        ".$vw."
        AND startdate BETWEEN to_date('$date_from', 'DD-MM-YYYY') AND to_date('$date_to', 'DD-MM-YYYY')
            ".$vw1."
        order by nvl(employeenr,0), startdate";
$parameters = array();

雇员在“100000”和“199999”之间或-在或和“199999”之间留一个空格?表示一个参数。如果查看查询,在底部将看到$parameters=array($date\u from);在下面,我发布了该变量的回音。@AbdullaChozhimadathil,它没有正常工作,
$vw1
?查询中的“?”是什么?我知道,我意识到了这一点。我现在更改了它,将更新它将您的代码添加到查询中,现在获取的文本与格式字符串不匹配错误。您的变量必须包含格式为“DD-MM-YYYY”的字符串,例如“27-08-2015”,不带任何空格前导或尾随,带负号作为分隔符,日期和月份实际上是两位数,年份是四位数。
string(10)“01-06-2015”string(10)“15-06-2015”
上述值是两个后变量的变量转储,这可能是因为我将绑定变量从df/dt重命名为date\u from/date\u改为?我这样做是为了可读性,但当绑定发生时,名称当然必须匹配。奇怪。我不知道为什么会这样。正如您显示的字符串与格式匹配一样,这一定是因为Oracle没有正确地获取它们,而可能是空字符串。我不知道为什么。我还没有将Oracle与PHP结合使用,所以我不知道如何传递绑定变量,也不知道会发生什么典型错误。很抱歉
AND startdate between to_date(:date_from || ' 00:00:00', 'DD-MM-YYYY HH24:MI:SS') 
                  and to_date(:date_to || ' 23:59:59', 'DD-MM-YYYY HH24:MI:SS')
$sql_report = "
        select
        id,
        employeenr,
        name,
        section,
        description,
        duration,
        startdate,
        starttime,
        enddate,
        endtime,
        worktime,
        statement,
        remark
        from
        data
        where   1=1
        ".$vw."
        AND startdate BETWEEN to_date('$date_from', 'DD-MM-YYYY') AND to_date('$date_to', 'DD-MM-YYYY')
            ".$vw1."
        order by nvl(employeenr,0), startdate";
$parameters = array();