Neden PHP'nin OCI8/Oracle oci_bind_array_by_name benim için çalışmıyor?

1 Cevap php

I / sql dizi pl bir php değişken bağlamaya çalışıyorum. Ben elle yürütmek ve bağlama ayarladığınızda PL / SQL işlem çalışıyor, bu yüzden bu sorun değil biliyorum. Bu oci_bind_array_by_name Bu neden sorun var.

Ben oci_bind_array_by_name işlevini çağırın yerin altındaki PHP kodu hattı için aşağıdaki hata iletisini alabilirsiniz:

Warning: oci_bind_array_by_name() [function.oci-bind-array-by-name]: You must provide max length value for empty arrays

Ben belgelerine başına işlev çağrısında maksimum uzunluk (250) sağlanması aslında çünkü kafam karıştı:

http://php.net/manual/en/function.oci-bind-array-by-name.php I'm using PHP 5.1.6

Burada ilgili PHP kodu:

$SQL = "BEGIN MYPKG.PROCESS_USERS(:USER_ID_ARRAY); END;";

$conn = self::getConnection();
$stmt = OCIParse($conn, $SQL);
$userIdArray= array(); /*I've also tried not initializing the OUT array (same error)
If I put some dummy value into the $userIdArray the procedure will run fine, but the results afterward will contain only that dummy value and not the output of the procedure*/
oci_bind_array_by_name($stmt,'USER_ID_ARRAY', $userIdArray, 250, -1, SQLT_VCS);

Ben paketinde tanımlanan bir dizi türü vardır:

TYPE USER_ID_ARRAY IS TABLE OF VARCHAR2(250) INDEX BY BINARY_INTEGER;

The PROCESS_USERS function in an abbreviated form:
PROCEDURE PROCESS_USERS(p_userIdArray out USER_ID_ARRAY) AS
  --Code here which processes all waiting users and returns their IDs in p_userIdArray
END PROCESS USERS;

1 Cevap

Ben yakından yeterince API okumadım çünkü ben bir aptal gibi hissediyorum. Görünüşe göre ben max_table_length belirterek ama hata mesajı ben -1 olarak sol max_item_length atıfta ... ama bu bir hayır-hayır ben bir IN yerine bir OUT parametre bağlama yaşıyorum beri.

Böylece gibi bağlama değişti ve şimdi çalışıyor:

oci_bind_array_by_name($stmt,'USER_ID_ARRAY', $userIdArray, 250, 250, SQLT_VCS);