ocibindbyname

(PHP 3>= 3.0.4, PHP 4 , PHP 5)

ocibindbyname --  Passa variáveis PHP para um ambiente de armazenamento do Oracle

Descrição

bool ocibindbyname ( resource stmt, string ph_name, mixed &variable [, int maxlength [, int type]] )

ocibindbyname() passa uma variável PHP variable para um ambiente de armazenamento no Oracle ph_name. Se isso for usado para entrada ou saída de dados irá ser determinado "run-time", e o espaço necessário para armazenagem será alocado. O parâmetro length seta o comprimento máximo para passar. Se você setar length como -1 ocibindbyname() irá usar o comprimento atual da variable para setar o comprimento máximo.

Se você precisar passar um tipo de dados abstrato (LOB/ROWID/BFILE) você precisa alocar isso primeiro usando a função ocinewdescriptor(). O length não é usado para tipo de dados abstratos e deve ser setado como -1. A variável type diz ao Oracle, qual classificação nós queremos usar. Valores possíveis são: OCI_B_FILE (Binary-File), OCI_B_CFILE (Character-File), OCI_B_CLOB (Character-LOB), OCI_B_BLOB (Binary-LOB) e OCI_B_ROWID (ROWID).

Exemplo 1. ocibindbyname() example

<?php
/* OCIBindByPos example thies at thieso dot net (980221)
  inserts 3 records into emp, and uses the ROWID for updating the
  records just after the insert.
*/

$conn = OCILogon("scott","tiger");

$stmt = OCIParse($conn,"insert into emp (empno, ename) ".
                       
"values (:empno,:ename) ".
                       
"returning ROWID into :rid");

$data = array(1111 => "Larry", 2222 => "Bill", 3333 => "Jim");

$rowid = OCINewDescriptor($conn,OCI_D_ROWID);

OCIBindByName($stmt,":empno",&$empno,32);
OCIBindByName($stmt,":ename",&$ename,32);
OCIBindByName($stmt,":rid",&$rowid,-1,OCI_B_ROWID);

$update = OCIParse($conn,"update emp set sal = :sal where ROWID = :rid");
OCIBindByName($update,":rid",&$rowid,-1,OCI_B_ROWID);
OCIBindByName($update,":sal",&$sal,32);

$sal = 10000;

while (list(
$empno,$ename) = each($data)) {
    
OCIExecute($stmt);
    
OCIExecute($update);
}

$rowid->free();

OCIFreeStatement($update);
OCIFreeStatement($stmt);

$stmt = OCIParse($conn,"select * from emp where empno in (1111,2222,3333)");
OCIExecute($stmt);
while (
OCIFetchInto($stmt,&$arr,OCI_ASSOC)) {
    
var_dump($arr);
}
OCIFreeStatement($stmt);

/* delete our "junk" from the emp table.... */
$stmt = OCIParse($conn,"delete from emp where empno in (1111,2222,3333)");
OCIExecute($stmt);
OCIFreeStatement($stmt);

OCILogoff($conn);
?>

Atenção

É uma má idéia usar magic quotes e ocibindbyname() simultâneamente, nenhuma aspas são necessárias em variáveis que já possuem e alguma aspas magicamente aplicadas irão ser escritas dentro do seu database como ocibindbyname() não está habilitada para distinguir aspas magicamente adicionadas para estas adicionadas intencionalmente.