codeigniter oracle 获取 insert_id()

Posted

技术标签:

【中文标题】codeigniter oracle 获取 insert_id()【英文标题】:codeigniter oracle get insert_id() 【发布时间】:2013-05-23 07:19:00 【问题描述】:

使用 Oracle 数据库在 CodeIgniter 中工作。现在的问题是 $this->db->insert_id();虽然它在 mysql DB 中完美运行,但在这里不起作用。 错误报告是:

发生数据库错误

This feature is not available for the database you are using.

Filename: D:\xampp\htdocs\spiceram\system\database\drivers\oci8\oci8_driver.php

Line Number: 503

我怎样才能得到最后一个插入ID;

【问题讨论】:

该功能不可用 - 可以在这里查看***.com/questions/3558433/… 【参考方案1】:

试试这样:

public function save($table, $data)

    $res = $this->db->insert($table, $data);

    //First select id attribute name
    $query = $this->db->get($table);
    $row = array_keys($query->row_array());
    $id_attr = $row[0];

    //Last Inserted id
    if($res)
    
        $query2 = $this->db->query("select MAX($id_attr) from $table");
        $row2 = array_values($query2->row_array());
        $id = $row2[0];
        return $id;
    
    else
    
        return false;
    

function insert($tableName, $post)
    
        //First insert data
        $res = $this->db->insert($tableName, $post);

        //Get inserted id
        if($res)
            $row = $this->db->query("SELECT ID FROM $tableName ORDER BY ID DESC OFFSET 0 ROWS FETCH NEXT 1 ROWS ONLY")->row();
            $id = $row->ID;
            return $id;
        else
            return false;
        

    

【讨论】:

【参考方案2】:

你可以使用这个 cod,它的代码返回 ID。

public function new_req($emp_id, $dep_id, $note)

    $query = $this->db->query('SELECT MAX(REQ_ID)+1 as ID FROM REQ');
    $row = $query->row();
    $id = $row->ID;

    if($id == NULL) $id = 1; 

    $data["REQ_ID"]   =$id;
    $data["EMP_ID"]   =$emp_id;
    $data["DEP_ID"]      =$dep_id; 
    $data["REQ_TYPE"]   =1;
    $data["REQ_NOTE"]   =$note;
    $data["IP"]           =$_SERVER['REMOTE_ADDR'];

    $this->db->insert("REQ",$data);
    return $id;

【讨论】:

【参考方案3】:
private function insert() 
  $this->ID = $this->getNextId();
  $this->db->insert($this->getTableName(), $this);
  $this->log($this->ID);

private function getNextId() 
  $this->db->select($this->getTableName()."_SEQUENCE.NEXTVAL AS NEXTID", FALSE);
  $this->db->from("dual");
  $query = $this->db->get();
  $row = $query->row();
  return $row->NEXTID;
 

希望这能解决 Oracle 数据库的问题。

【讨论】:

以上是关于codeigniter oracle 获取 insert_id()的主要内容,如果未能解决你的问题,请参考以下文章

Codeigniter 和 Oracle 获取插入查询的 last_id

Codeigniter 获取玩家已完成的目标总和

在 ColdFusion 中如何使用 in 变量获取 Oracle 存储过程以返回值?

如何在 codeigniter 中使用 FIND_IN_SET() 查询

在 CodeIgniter 中重用 oracle 序列中的值

php 在CodeIgniter网站中添加表单中的Captcha:https://www.cloudways.com/blog/captcha-in-codeigniter/