【问题标题】:using codeigniter and need to get id of last auto-incremented id for next query, using oci8使用 codeigniter 并且需要使用 oci8 获取下一个查询的最后一个自动递增 id 的 id
【发布时间】:2011-05-17 09:28:48
【问题描述】:

在项目中使用 codeigniter 和 oci8。

$this->db->insert_id();非常适合获取上一个查询的最后一个自动递增的 id,但它似乎不适用于 oracle 数据库。

感谢任何帮助。我很想使用 mysql,但是需要一个 oracle 数据库。

$this->db->insert_id();对于codeigniter,就像php的mysql_insert_id()

【问题讨论】:

    标签: php oracle codeigniter oracle-call-interface


    【解决方案1】:

    看这里:

    Get the auto-generated ID after an insert

    $data = array("value1","value2","value3");
    $db = OCILogon("user","password");
    $stmt = OCIParse($db,"insert into mytable values (myid.nextval,:myfield) returning id into :id");
    
    OCIBindByName($stmt,":ID",$id,32);
    OCIBindByName($stmt,":MYFIELD",$myfield,32);
    
    while (list(,$myfield) = each($data)) {
    OCIExecute($stmt);
     echo "$myfieldgot id:$id\n";
    }
    

    您还可以考虑使用 DB 接口层,例如 PDO

    【讨论】:

    【解决方案2】:

    获取下一个序列号怎么样?

    选择'||表格名称 || '_seq.currval 来自对偶

    ?

    【讨论】:

    • 假设我有表 cmets(id, message), transactions(comment_id, step_id), steps(id, title) - steps 表是预定义的,当用户提交表单时,它会添加它到 cmets 表,它将引用其中一个步骤,所以我需要存储到 cmets 表中,然后获取新生成的 cmets.id 并将其存储到 transactions 表中,也带有适当的 step_id。
    • 所以它将是 INSERT INTO cmets (message) VALUES ('this is my msg') - 然后我需要将新创建的 id 的 cmets.id 存储到 $comment_id = cmets.id from query刚刚运行,然后运行查询 INSERT INTO transactions ('comment_id', 'step_id') VALUES ($comment_id, $step_id) - 不确定 _seq.currval 应该如何/在哪里。
    • 看这里:searchoracle.techtarget.com/tip/… 他们是如何实现它的。我不知道你是否有这个级别的访问权限。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-19
    • 1970-01-01
    • 1970-01-01
    • 2021-08-01
    相关资源
    最近更新 更多