|
(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() не способна отличить магически добавленные кавычки от кавычек, добавленных преднамеренно.
|
|
|