 |
(PHP
3>= 3.0.4, PHP 4) OCIBindByName - связывает PHP-переменную с Oracle
Placeholder/заглушкой. Описаниеint OCIBindByName
(int stmt, string ph_name, mixed & variable, int length [, int type]) OCIBindByName()
связывает PHP-переменную variable с Oracle-заглушкой ph_name.
Использование её для вывода или ввода определяется на этапе прогона, и выделяется
необходимое пространство для хранения. Параметр length устанавливает
максимальный размер связки. Если вы устанавливаете length в -1,
OCIBindByName() будет использовать текущий размер переменной variable
для установки максимального размера. Если вам нужно связать абстрактный
Datatype (LOB/ROWID/BFILE), вы должны сначала разместить его с использованием
OCINewDescriptor(). length не используется для абстрактных
типов данных/Datatypes и должен быть установлен в -1. Переменная type
говорит Оracle, какой тип дескриптора мы хотим использовать. Возможные значения:
OCI_B_FILE (Binary-File), OCI_B_CFILE (Character-File), OCI_B_CLOB (Character-LOB),
OCI_B_BLOB (Binary-LOB) и OCI_B_ROWID (ROWID). Пример
1. OCIDefineByName<?php
/* пример OCIBindByPos thies@thieso.net (980221) вставляются 3 записи в emp и
используется ROWID для обновления записей сразу после вставки. */ $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); /* удаляет нашу "junk" из таблицы
emp ... */ $stmt = OCIParse($conn,"delete from emp where empno in (1111,2222,3333)");
OCIExecute($stmt); OCIFreeStatement($stmt); OCILogoff($conn); ?> |
|
| Предупреждение! | Одновременное использование магических
кавычек и OciBindByName() это плохая идея, так как закавычивание не нужно
для закавыченных переменных, а любые кавычки, применённые магически, будут записаны
в вашу базу данных, поскольку OciBindByName() не способна отличить магически
добавленные кавычки от кавычек, добавленных преднамеренно. |
|  |