Ошибка ORA-01008 в PHP с базой данных Oracle

#php #oracle

#php #Oracle

Вопрос:

Я новичок в PHP-разработчике. Я обновил свой запрос в PHP, используя метод OCI_Parse, я получаю сообщение об ошибке ниже. Мой код и изображение ошибки приведены ниже.

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

Это моя функция:

 static public function notes_recency_data_table_Update($noCircUpdate, $member, $ddate, $ptype) {
                $rows = [];
                $conn = App::getBizConnection();
               
                $d_date = new DateTime($ddate);
                $d_date = date_format($d_date, "d-M-y");
                 
                $data_index = 100;
                $data_group = '2B';
                $line_type = 'PC';
                $stub_mic = 'Recency table';
 

Коллекция Foreach (мой запрос на обновление)

           foreach($noCircUpdate as $key => $noCircDataUpdate) {
                $clauseId = $noCircDataUpdate['CLAUSE_ID'];
                $stub = $noCircDataUpdate['STUB'];
                $print = $noCircDataUpdate['PRINT_ONLY'];
                $digit = $noCircDataUpdate['DIGIT_ONLY'];
                $prd = $noCircDataUpdate['PRINT_DIGIT'];
                $oneye = $noCircDataUpdate['R_1_YR'];
                $twoye = $noCircDataUpdate['R_2_YR'];
                $print_pct = $noCircDataUpdate['PRINT_ONLY_PCT'];
                $digit_pct = $noCircDataUpdate['DIGIT_ONLY_PCT'];
                $prd_pct = $noCircDataUpdate['PRINT_DIGIT_PCT'];
                $oneye_pct = $noCircDataUpdate['R_1_YR_PCT'];
                $twoye_pct = $noCircDataUpdate['R_2_YR_PCT'];
                $tot = $noCircDataUpdate['CIRCULATION_TOTAL'];
                $per = $noCircDataUpdate['CIRCULATION_PERCENTAGE'];
                if(isset($stub)) {
          
            $stid = oci_parse($conn, 'UPDATE ABC$PRODUCTION.BPS_RECENCY SET DATA_INDEX=:dataindex, DATA_GROUP=:datagroup, STUB=:stub, R_1_YR=:r_1_yr, R_1_YR_PCT=:r_1_yr_pct, R_2_YR=:r_2_yr, R_2_YR_PCT=:r_2_yr_pct, CIRCULATION_TOTAL=:circ_tot, 
            CIRCULATION_PERCENTAGE=:circ_perc, LINE_TYPE=:linetype, PRINT_ONLY=:print_only, DIGIT_ONLY=:digit_only, PRINT_DIGIT=:print_digit, PRINT_ONLY_PCT=:print_only_pct, DIGIT_ONLY_PCT=:digit_only_pct, PRINT_DIGIT_PCT=:prd_pct, STUB_MIC=:stub_mic WHERE 
            MEMBER_NUMBER=:member_num AND DRIVE_DATE=TO_DATE(:drive_date) AND PRODUCT_TYPE = :product_type'); 
           
                    
                oci_bind_by_name($stid, ":dataindex", $data_index);
                oci_bind_by_name($stid, ":datagroup", $data_group);
                oci_bind_by_name($stid, ":stub", $stub);
                oci_bind_by_name($stid, ":r_1_yr", $oneye);
                oci_bind_by_name($stid, ":r_1_yr_pct", $oneye_pct);
                oci_bind_by_name($stid, ":r_2_yr", $twoye);
                oci_bind_by_name($stid, ":r_2_yr_pct", $twoye_pct);
                oci_bind_by_name($stid, ":circ_tot", $tot);
                oci_bind_by_name($stid, ":circ_perc", $per);
                oci_bind_by_name($stid, ":linetype", $line_type);
                oci_bind_by_name($stid, ":print_only", $print);
                oci_bind_by_name($stid, ":digit_only", $digit);
                oci_bind_by_name($stid, ":print_digit", $prd);
                oci_bind_by_name($stid, ":print_only_pct", $print_pct);
                oci_bind_by_name($stid, ":digit_only_pct", $digit_pct);
                oci_bind_by_name($stid, ":print_digit_pct", $prd_pct);
                oci_bind_by_name($stid, ":stub_mic", $stub_mic);
                oci_bind_by_name($stid, ":member_num", $member);
                oci_bind_by_name($stid, ":drive_date", $d_date); 
                oci_bind_by_name($stid, ":product_type", $ptype);
              
                
               $res = oci_execute($stid);
               if( $res ){
                echo "OKn";
               
              } else {
                 $error = oci_error($stid);
                     echo "Error: " . $error['message'] . "n";
               }
               
             $data_index  ;
                }
            }
            
            App::closeConnection($conn, $stid);
            return true;
        }
 

Это мой код
МОЙ образ БД
Скриншот моего изображения ошибки

ошибка ora-01008 связана с появлением этой ошибки, как я могу устранить ошибку. я не о oracle. пожалуйста, устраните ошибку.

Комментарии:

1. :prd_pct в вашем запросе не совпадает :print_digit_pct с вашим oci_bind_by_name

2. Спасибо, Айнбер. Я изменю это.

3. @aynber Я изменю запрос, но снова та же ошибка.

4. Ищите другие несоответствующие имена. Не связанный с ошибкой, изучите отправку данных в виде массивов с oci_bind_array_by_name() последующим выполнением ОБНОВЛЕНИЯ в блоке PL / SQL с использованием FORALL. Это может быть быстрее, чем многократный вызов oci_execute. См. Раздел «Привязка массива и массовая обработка PL / SQL» на стр. 194 The Underground PHP и Oracle Manual .

5. @ChristopherJones Ок. Спасибо