Итак, ситуёвина:
в классе ora есть функция
function addBindByName($key, $val)
{
if (':' != substr($key,0,1)) {
$key = ':'.$key;
}
echo $key.' => '.$val;
$this->bind[$key] = $val;
}
на странице, после инклуда файла этого класса вызываю
$this->ora->addBindByName(":test1", $test1);
$this->ora->addBindByName(":test2", $test2);
$this->ora->addBindByName(":test3", $test3);
$this->ora->addBindByName(":test4", $test4);
Есть также в том же классе функция ociexeb, в которой часть, отвечающая за бинды выглядит так:
if (!empty($this->bind)) {
foreach ($this->bind as $key=>$val) {
if (!oci_bind_by_name($this->res, $key, $val, 4000)) {
return false;
Ну и далее - OCIExecute.
Результат - следующий:
во все поля записывается значение последней переменной из блока addBindByName (в данном случае - значение переменной $test4).
Что сделано неверно?
Powered by ScribeFire.
По долгу службы появилось пару вопросов. Может знает кто.
Первый: как оракловским sql’ем вызывается транзакция?
Пробовал
START TRANSACTION; ... COMMIT WORK;
BEGIN TRANSACTION; ... COMMIT WORK;
BEGIN; ... COMMIT WORK;
И прочее. Где я не прав?
Второй: инструментом Toad for Oracle созданы сиквенсы для двух таблиц. Когда вызываю их из кода
SELECT SEQ_ONE.CURRVAL||SEQ_TWO.NEXTVAL FROM DUAL
возвращается ошибка
Error: 8002 ORA-08002: sequence SEQ_ONE.CURRVAL is not yet defined in this session
Где я неправ?
UPD2: Сорри, тоже разобрался. Без предварительного вызова SEQ_ONE.NEXTVAL, SEQ_ONE.CURRVAL никаких положительных результатов не даёт ![]()
Третий: по тому самому селекту в сиквенсе добываю следующее значение последовательности функцией @OCIFetchStatement() (PHP). Насколько говорит документация, функция, цитирую, “Выбирает все строки из результата запроса в массив”. Соответственно, объединяю массив в строку функцией implode() (так как в результате в массиве должно появиться только одно значение, следующее значение последовательности).
Возвращаю строку echo‘й. В документ пишется Array.
Где я дурак?
UPD1: решил, методом @OCIFetchStatement(OCI_NUM)
Буду ужасно благодарен.




