2

CodeIgniter フレームワークを使用して、CLOB 列を持つテーブルに挿入するにはどうすればよいでしょうか?

表は:

CREATE TABLE NOTIFICATIONS
{
  ID NUMBER,
  CONTENT CLOB
}

PHPコードは次のとおりです。

$id = 1;
$content = /* An Incredibly Long & Complex String */ 

$query = "INSERT INTO notifications (id,content) values (?,?)";
$this->dbconnxn->query($query, array($id,$content));

しかし、これはうまくいかないようです。

何か案は?

4

2 に答える 2

1

CodeIgniterはこれをサポートしていません。手動で行う必要があります。データベースへの接続を再作成しないために、CIによって作成された接続IDを使用できます。

$this->db->conn_id
于 2012-12-10T14:44:01.263 に答える
0

私はそれをモデル2関数で作成して解決しました。1)CLOBの挿入と更新、および2)CLOBの読み取り用です。

1) モデルでは、Clob を設定するために作成した関数は updateClobImg64 であり、insert の後に呼び出されます。

public function create_file($file){

    $file->file_pk1=$this->getMaxPk1();
    $data = array(
        "file_pk1" => $file->file_pk1,
        "file_name" => $file->file_name,
        "file_type"=>$file->file_type,
        "file_location"=>$file->file_location,
        //"file_img64"=>$file->file_img64,
        "file_created_date"=>$file->file_created_date,
        "file_created_by" => $file->file_created_by,
        "file_storage_type"=>$file->file_storage_type,

    );
    $this->db->insert("file_repository", $data);
    if(isset($file->file_img64) && !empty($file->file_img64)) $this->updateClobImg64($file->file_pk1,$file->file_img64);

    return $file->file_pk1;
}

public function updateClobImg64($file_pk1,$img64){

    $sql='update "file_repository" set "file_img64"=EMPTY_CLOB() where "file_pk1"='.$file_pk1.' RETURNING "file_img64" INTO :clob';

    $stid = oci_parse($this->db->conn_id, $sql);
    $clob = oci_new_descriptor($this->db->conn_id, OCI_D_LOB);

    oci_bind_by_name($stid, ":clob", $clob, -1, OCI_B_CLOB);
    oci_execute($stid, OCI_NO_AUTO_COMMIT); // use OCI_DEFAULT for PHP <= 5.3.1
    $clob->save($img64);

    oci_commit($this->db->conn_id);

    $clob->free();
    OCIFreeStatement($stid);


}</span>

2) clob を読み取るには、この方法で実装した read 関数が必要です。 function read_clob($field) { return $field->read($field->size()); }

モデル選択機能で呼び出されます。

パブリック関数 get_all(){

    $query = $this->db->get_where("file_repository", array());

    if($query->num_rows() > 0){
        $files=$query->result();
        foreach($files as $key=>$row){

            $files[$key]->file_img64=$this->read_clob($row->file_img64);

        }

        return $files;
    }
}</span>

これがこの問題の誰かに役立つことを願っています。

于 2018-07-12T23:43:22.807 に答える