boolean ocibindbyname (resource statement, string placeholder, reference variable, integer length, integer type)
Функция ocibindbyname (листинг 17.32) привязывает маркер Oracle к переменной PHP. Ей необходимо передать идентификатор оператора, созданного функцией ociparse, имя маркера, ссылку на переменную PHP и максимальную длину связанных данных. Для того чтобы воспользоваться длиной переменной, переданной аргументом variable, следует установить значение -1.
Необязательный аргумент type задает тип данных и обязателен при подключении к данным абстрактного типа. При установке типа данных используется одной из следующих констант: OCI_B_BLOB, OCI_B_CFILE, OCI_B_CLOB, OCI_B_FILE или OCI_B_ROWID. Перед привязкой к абстрактному типу данных воспользуйтесь функцией ocinewdescriptor. В аргументе length необходимо установить значение -1.
В листингах 17.33 и 17.34 продемонстрировано использование ocibindbyname в хранимых процедурах.
Листинг 17.32. Функция ocibindbyname
<?php
// задать добавляемые данные
$NewEmployee = array(
array(8001, 'Smith', 'Clerk', 30), array(8002, 'Jones', 'Analyst', 20), array(8003, 'Atkinson', 'President', 40)
);
// подключиться к базе данных
$Link = ocilogon("scott", "tiger");
// создать запрос
$Query = "INSERT INTO emp " .
"(EMPNO, ENAME, JOB, HIREDATE, DEPTNO) " .
"VALUES (:empno, :ename, :job, SYSDATE, :deptno )
";
// проанализировать запрос $Statement = ociparse($Link, $Query); //создать дескриптор абстрактного типа данных $RowID = ocinewdescriptor($Link, OCI_D_ROWID); // связать вводимые и выводимые значения
ocibindbyname($Statement, ":empno", $EmployeeNumber, 32); ocibindbyname($Statement, ":ename", $EmployeeName, 32); ocibindbyname($Statement, ":job", $Job, 32); ocibindbyname($Statement, ":deptno", $DeptNo, 32); //обход каждого нового работника foreach($NewEmployee as $e)
{
//задать значения столбцов $EmployeeNumber = $e[0]; $EmployeeName = $e[1];
$Job = $e[2]; $DeptNo = $e[3];
//выполнить запрос без автоматического выполнения ociexecute($Statement, OCI_DEFAULT);
}
// освободить оператор
//ocifreestatement($Statement);
// создать запрос для получения содержимого
$Query = "SELECT EmpNo, EName, Job, HireDate, DName " .
"FROM emp JOIN dept ON (emp.DeptNo = dept.DeptNo)"; // проанализировать запрос $Statement = ociparse($Link, $Query); //выполнить запрос при отключенном autocommit ociexecute($Statement, OCI_DEFAULT); // выбрать строки
while(ocifetchinto($Statement, $Columns,
OCI_NUM | OCI_RETURN_NULLS | OCI_RETURN_LOBS))
{
print(implode(",", $Columns) . "<br>n");
}
// освободить оператор ocifreestatement($Statement); // отменить вставки
//При обычной работе этого делать не нужно, но если каждый раз
//отменять вставки, то можно повторять оператор снова и снова
ocirollback($Link);
// закрыть соединение
ocilogoff($Link);
?>
| Листинг 17.33. Процедура выборки имени работника
CREATE OR REPLACE PROCEDURE get_emp_name (
emp_number IN emp.Empno%TYPE, emp_name OUT emp.Ename%TYPE) AS
BEGIN
SELECT Ename
INTO emp_name FROM emp
WHERE Empno = emp_number;
END;
I Листинг 17.34. Функция ocibindbyname и хранимые процедуры_
<?php
// открыть соединение
$Connection = ocilogon("scott", "tiger"); //создать оператор, вызывающий хранимую процедуру $Query = "BEGIN get_emp_name(74 99, :emp_name); END;"; $Statement = ociparse($Connection, $Query); // привязать к имени маркер
ocibindbyname($Statement, ":emp_name", $EmployeeName, 32);
// выполнить оператор
ociexecute($Statement);
print($EmployeeName);
// освободить память для оператора
ocifreestatement($Statement);
// закрыть соединение
ocilogoff($Connection);
?>
Функция ocicancel предназначена для завершения чтения из курсора.
boolean ocicollappend(object collection, string value)
Функция ocicollappend осуществляет добавление в коллекцию.
boolean ocicollassign(object collection, object collection2)
Функция ocicollassign присваивает одну коллекцию другой.
boolean ocicollassignelem(object collection, integer index, string value)
Функция ocicollassignelem присваивает заданное значение коллекции по заданному индексу.
string ocicollgetelem(object collection, integer index)
Функция ocicollgetelem возвращает значение записи коллекции по заданному индексу.
integer ocicollmax(object collection)
Функция ocicollmax предназначена для получения максимального значения коллекции. Для массивов этим значением является максимальная длина.
integer ocicollsize(object collection)
Функция ocicollsize предназначена для получения размера коллекции.
boolean ocicolltrim(object collection, integer number)
Функция ocicolltrim удаляет указанное количество элементов с конца коллекции.
boolean ocicolumnisnull(resource statement, value column)
Функция ocicolumnisnull предназначена для проверки столбца на пустое значение. Столбцы можно задавать по номерам, и в этом случае их нумерация начинается с единицы. Кроме того, столбцы можно задавать по их именам.
string ocicolumnname(resource statement, integer column)
Функция ocicolumnname возвращает имя столбца по заданному номеру столбца. Столбцы можно задавать по номерам, и в этом случае они нумеруются с единицы. Кроме того, столбцы можно задавать по их именам.