Нужна помощь в удалении ошибки ORA-00911 при использовании oci_execute()

Я использую следующий код для генерации SQL.

$sql = "INSERT INTO SUBSTATION VALUES (".
            "SEQ_SUBSTATION_FEATURE_ID.NEXTVAL, ".
            "'".$_REQUEST['substationName']."', ".  // SUBSTATION NAME
            "null, ".                               // SLD_PATH       
            "null, ".                               // GEOMETRY
            "'".$_REQUEST['substationType']."', ".  // SUBSTATION_TYPE
            $_REQUEST['capacity'].", ".             // CAPACITY
            "'".$_REQUEST['address_1']."', ".       // ADDRESS_1
            "'".$_REQUEST['address_2']."', ".       // ADDRESS_2
            "'".$_REQUEST['landmark']."', ".        // LANDMARK
            "'".$_REQUEST['state']."', ".           // STATE
            "'".$_REQUEST['district']."', ".        // DISTRICT
            "'".$_REQUEST['pin']."', ".             // PIN
            $_REQUEST['noOfTransformers'].", ".     // NO_OF_TRANSFORMERS
            $_REQUEST['noOfLTBreakers'].", ".       // NO_OF_LT_BREAKERS
            $_REQUEST['noOfHTBreakers'].", ".       // NO_OF_HT_BREAKERS
            $_REQUEST['noOfHTIsolators'].", ".      // NO_OF_HT_ISOLATORS
            $_REQUEST['noOfLTBoards'].", ".         // NO_OF_LT_BOARDS
            "to_date('".$_REQUEST['commissioningDate']."','DD/MM/YYYY'), ". // COMMISSIONING DATE
            "'".$_REQUEST['schemeNo']."', ".        // SCHEME_NO
            "to_date('".$_REQUEST['schemeDate']."','DD/MM/YYYY'), ".        // SCHEME_DATE
            "'".$_REQUEST['comments']."', ".        // COMMENTS
            "'N', ".                                // APPROVED
            "null, ".                               // APPROVER
            "null);";                               // APPROVED_ON

Вот сгенерированный SQL

INSERT INTO SUBSTATION VALUES 
(SEQ_SUBSTATION_FEATURE_ID.NEXTVAL, 'S/S 3 4400', NULL, NULL, 'D', 5000, 
'The Address 1', 'The Address 2', 'The Landmark', '15', '1', '234234', 
34, 65, 12, 98, 43, 
to_date('01/09/2010','DD/MM/YYYY'), 'Scheme 12345', 
to_date('06/10/2010','DD/MM/YYYY'), 'This substation has following assets', 
'N', null, null);

Теперь я запускаю SQL, сгенерированный непосредственно в SQL Developer, он отлично работает. Но когда я запускаю запрос с помощью oci_execute($sql) в PHP, он не работает. При отладке используется следующий код:

$st = oci_parse($conn, $sql) or die("<br />Error parsing query. ");  
if(!oci_execute($st)){  
  $err = oci_error($st);  
  echo $err['message'];  
}

Он показывает сообщение об ошибке:

ORA-00911: недопустимый символ

Любая помощь, пожалуйста .......


person Kumar Kush    schedule 12.10.2011    source источник
comment
Пожалуйста, используйте запрос со связанным параметром вместо объединения строк вместе: это облегчит понимание вашей вставки, будет работать, когда один из ваших входных данных содержит одинарную кавычку, и это предотвратит инъекции SQL.   -  person Codo    schedule 13.10.2011


Ответы (2)


Удалите точку с запятой в конце сгенерированного оператора SQL и повторите попытку.

person Codo    schedule 13.10.2011
comment
Привет кодо, я пробовал это. но не повезло. Смотрите решение, которое у меня есть posetd. В любом случае спасибо - person Kumar Kush; 13.10.2011

Я решил эту проблему, используя oci_bind_by_name для подготовки оператора. Пожалуйста, перейдите по этой ссылке...

Вставка данных в базу данных оракула с использованием php

Я избавился от ORA-00911. На этот раз ошибка ORA-01461 (неверный месяц) при вставке даты. По ссылке проблема решилась...

[Решено] ORA-01461 Ошибка в ocibindbyname

Спасибо

person Kumar Kush    schedule 13.10.2011
comment
Я рад, что вы смогли решить эту проблему, используя связанные параметры. Это решит сразу около пяти проблем: вашу первоначальную проблему, читабельность кода, кавычки, SQL-инъекции и не забывайте о скорости. - person Codo; 13.10.2011