2015-12-13 390 views
0

我很難用我的代碼解決這個問題。我仍然是Oracle/PHP/SQL的新手。我已經嘗試了很多解決方案,但都沒有工作。這是代碼和錯誤。警告:oci_execute():ORA-00907:缺少右括號

$searchsql = " 
    SELECT rm.room_ID, rm.room_no 
     FROM bsi_room rm 
    WHERE rm.roomtype_id = ".$roomTypeId." 
      AND rm.capacity_id = ".$capcityid."".$extraSearchParam." 
      AND rm.room_id NOT IN 
        (SELECT resv.room_id 
        FROM bsi_reservation resv, bsi_bookings boks 
        WHERE  boks.is_deleted = FALSE 
          AND resv.bookings_id = boks.booking_id 
          AND resv.room_type_id = ".$roomTypeId." 
          AND (('".$this->mysqlCheckInDate."' BETWEEN boks.start_date AND DATE_SUB(boks.end_date, INTERVAL 1 DAY)) 
          OR (DATE_SUB('".$this->mysqlCheckOutDate."', INTERVAL 1 DAY) BETWEEN boks.start_date AND DATE_SUB(boks.end_date, INTERVAL 1 DAY))    OR (boks.start_date BETWEEN '".$this->mysqlCheckInDate."' AND DATE_SUB('".$this->mysqlCheckOutDate."', INTERVAL 1 DAY))       OR (DATE_SUB(boks.end_date, INTERVAL 1 DAY) BETWEEN '".$this->mysqlCheckInDate."' AND DATE_SUB('".$this->mysqlCheckOutDate."', INTERVAL 1 DAY))))"; 

警告:oci_execute():ORA-00907:缺少右括號

我做錯什麼地方出錯了?

+0

好吧,就像它說的那樣,你的括號是不匹配的。首先將該查詢獲取到任何sql工作表(例如,您可以使用sqldeveloper),讓它使用一些值,然後將其粘貼到PHP並使用''「。$ var。'」'替換常量值。順便說一句,熟悉準備好的語句,有一天你會被SQL注入攻擊,如果你寫這樣的語句。 – Timekiller

回答

0

線:

AND (('".$this->mysqlCheckInDate."' BETWEEN boks.start_date AND DATE_SUB(boks.end_date, INTERVAL 1 DAY)))) 

應該有3個右括號字符代替4.子查詢塊結束太早。

0

明白了。我忘了把所有的日期數據類型放到日期。現在它好吧