2015-08-27 85 views
2

我知道有關於這個錯誤的幾個問題,也爲PHP。
我已經嘗試了大部分的答案,似乎沒有任何工作。PL/SQL查詢沒有結果,但應該有。

這是我的查詢:

"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); 

回聲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_from和$ DATE_TO:

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

我在做什麼錯?

+0

employeenr'100000'和'199999'之間 - 在OR和'199999'之間留出空格 –

+0

The?代表參數。如果你看看查詢,在底部你會看到$ parameters = array($ date_from); 下面,我發佈了該變量的回聲。 – McBurgerKong

+0

@AbdullaChozhimadathil那可悲的是 – McBurgerKong

回答

0

SOLUTION

我已經能夠通過在查詢的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(); 
1

以後如何使用$Parameters?看起來好像你想用它作爲一個綁定varibale數組以便稍後傳遞給Oracle。如果是這樣,那麼你使用這個不正確,因爲而不是保存一個變量的值,該字符串包含SQL。這不是綁定變量在Oracle中的工作方式。

您必須給Oracle一個完整的查詢來解析,只有在查詢中可能是未知的(日期,數字或字符串)。這些你可以稍後通過。您以後無法解析一半查詢並在變量中添加更多SQL。

所以AND ?不能被解析,因爲在這裏沒有任何價值。另一方面,可能會解析類似AND X = ?的東西,因爲Oracle希望在查詢得到執行時獲得比較列X的值。

+0

下面我知道,我意識到這一點。我現在改了它,會更新它 – McBurgerKong

0

新問題,新答案。

儘管如此,您還是不能使用綁定變量作爲變量(日期,數字或字符串),但嘗試用它替換字符串的部分。這不起作用。

':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 

AND TRUNC(startdate) BETWEEN to_date(:date_from, 'DD-MM-YYYY') 
         AND to_date(:date_to, 'DD-MM-YYYY') 

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') 
+0

已將您的代碼添加到查詢中,現在獲取的文字不符合格式字符串錯誤。 – McBurgerKong

+0

您的變量必須包含格式爲「DD-MM-YYYY」的字符串,例如'27 -08-2015',沒有任何空格前導或尾隨,負號用於分隔符,並且日期和月份實際上正好是兩位數字,並且年份具有四位數字。 –

+0

'string(10)「01-06-2015」 string(10)「15-06-2015」' 上面的值是兩個post變量的var_dump – McBurgerKong