2010-10-17 14 views
0

Catchable erreur fatale: objet de la classe OCI-collection n'a pas pu être convertie en chaîne dans E: \ php \ htdocs \ PHPRPC \ func.php sur la ligne 318problème avec php + oracle (OCI)

Le code:

$sql='BEGIN NCCM_INTERFACE_HISDETAIL(:orgcode,:inhiscode,:inputer,:items); END;'; 
$conn=oci_connect('chis','chis123','ORCL','UTF8'); 
$stmt = oci_parse($conn, $sql); 
$collection = oci_new_collection($conn,"NCCM_INTERFACE_TABLE"); 
foreach ($items as $item) 
{ 
    $collection->append($item); 
} 
oci_bind_by_name($stmt, ":orgcode", $orgcode, -1); 
oci_bind_by_name($stmt, ":inhiscode", $inhiscode, -1); 
oci_bind_by_name($stmt, ":inputer", $inputer, -1); 
oci_bind_by_name($stmt, ":items", $collection,-1); //here the error line 
$s=oci_execute($stmt); 

Quelqu'un peut-il m'aider à résoudre ce problème? Merci d'avance.

+0

Ma version php est 5.2.12 et la version oracle est Oracle 10g –

Répondre

1

Le problème est que vous liez un objet de collection alors qu'Oracle attend que le type lié soit SQLT_CHR, par ex. un VARCHAR. Ainsi, Oracle essaiera d'utiliser l'objet lié dans un contexte de chaîne, ce qui n'est pas possible car la collection n'a apparemment pas de méthode __toString implémentée. Par conséquent vous obtenez l'erreur que l'objet n'a pas pu être converti en chaîne.

Je ne suis pas sûr à ce sujet, mais essayez de fournir un autre type dans l'appel de liaison, par exemple:

oci_bind_by_name($stmt, ":items", $collection,-1, OCI_B_NTY); 
+1

Merci beaucoup !!! le problème a été résolu de cette façon! –