Как использовать CLOB в Oracle 11g с Yii Framework - PullRequest
0 голосов
/ 07 февраля 2011

У меня есть объект в Yii, сопоставленный с таблицей, которая содержит один столбец CLOB.

Как я могу вставить с помощью метода save () вызов строки длиной ~ 54k символов в строку?

Ответы [ 2 ]

1 голос
/ 08 февраля 2011

Yii имеет методы событий beforeSave () и afterSave () в своих моделях ActiveRecord. Я бы использовал их вместо переопределения метода save (). Поместите все необходимые методы Oracle там. В основном: обнулите поля в beforeSave (), затем в afterSave () запишите значения в БД с помощью OCIParse () и т. Д.

Вот хорошая статья в блоге об этом с использованием фреймворка Cake PHP, который очень похож (MVC с методами до и после сохранения). Вам, очевидно, потребуется изменить этот код для работы с Yii, но он должен привести вас на правильный путь:

http://nik.chankov.net/2008/01/03/cakephp-and-oracle-handling-clob-fields/

В новейшей версии Yii теперь есть построитель запросов, который может помочь в коде afterSave (), который вам нужно будет написать:

http://www.yiiframework.com/doc/guide/1.1/en/database.query-builder

Удачи!

0 голосов
/ 26 октября 2013

Я решаю это только сейчас.Мне также нужно использовать BLOB в oracle 11g, я хочу вставить изображение в таблицу oracle.

Я обыскиваю его по всей сети, наконец-то я нашел, вероятно, решение в введите описание ссылки здесь .

, пожалуйста, щелкните по нему.

Я следую примеру # 2

<?php
$db = new PDO('odbc:SAMPLE', 'db2inst1', 'ibmdb2');
$stmt = $db->prepare("insert into images (id, contenttype, imagedata) values (?, ?, ?)");
$id = get_new_id(); // some function to allocate a new ID

// assume that we are running as part of a file upload form
// You can find more information in the PHP documentation

$fp = fopen($_FILES['file']['tmp_name'], 'rb');

$stmt->bindParam(1, $id);
$stmt->bindParam(2, $_FILES['file']['type']);
$stmt->bindParam(3, $fp, PDO::PARAM_LOB);

$db->beginTransaction();
$stmt->execute();
$db->commit();
?>

Вместо этого я получаю $ db

$db = Yii::app()->db->getPdoInstance() 

$db = new PDO('odbc:SAMPLE', 'db2inst1', 'ibmdb2');

и все остальное одинаково.

Удачи!

...