【问题标题】:Warning: oci_execute(): ORA-00907: missing right parenthesis警告:oci_execute(): ORA-00907: 缺少右括号
【发布时间】:2016-03-19 05:03:52
【问题描述】:

我很难用我的代码解决这个问题。我还是 Oracle/PHP/SQL 的新手。我已经尝试了很多解决方案,但都没有奏效。这是代码和错误。

$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: 缺少右括号

我是不是在某个地方做错了什么?

【问题讨论】:

  • 好吧,就像它说的那样,你的括号不匹配。首先将该查询获取到任何 sql 工作表(例如,您可以使用 sqldeveloper),使其与一些值一起工作,然后才将其粘贴到 PHP 并用'".$var.'" 替换常量值。顺便说一下,熟悉prepared statements,如果你写这样的语句,你总有一天会被SQL注入所击中。

标签: php sql oracle parentheses


【解决方案1】:

行:

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

应该有 3 个右括号字符而不是 4 个。子查询块过早结束。

【讨论】:

    【解决方案2】:

    知道了。我忘了把 to_date 放到所有的日期数据类型中。现在好了

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-05-23
      • 2018-12-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多