繁体   English   中英

codeigniter 2.0一次将记录插入两个表中

[英]codeigniter 2.0 inserting records in two tables at once

我不知道如何使用活动记录或使用手动sql来处理这个问题。 我想要做的是在“联系人”表中添加一个记录,该记录具有自动增加的id,然后在“order”表中添加一条记录,其中包含相应“联系人”记录ID的id。

我知道我可以使用$ this-> db-> insert_id()来获取插入的联系人记录的id,但这只能在使用活动记录时起作用吗?

另外,我可以在一个查询中实现这种类型的插入,还是必须将其拆分为两个?

$this->db不引用Active Record。 您必须选择使用Active Record, $this->db只是引用数据库抽象层。

也就是说,您可以在查询(Active Record或不是Active $this->db->insert_id()之后立即使用$this->db->insert_id() )来获取其插入ID。

但是为了处理依赖于彼此ID的一次插入多个记录,我将切换到InnoDB作为您的表类型(如果您还没有)并使用CodeIgniter的事务

这是一个根据CodeIgniter文档改编的示例:

$this->db->trans_start();

$this->db->query('INSERT INTO table1 VALUES(id,field1,field2)');
$table1_id = $this->db->insert_id();

$this->db->query('INSERT INTO table2 VALUES(id,' . $table1_id . ',field2,field3)');

$this->db->trans_complete(); 

根据Codeigniter的说法, $this->db被命名为“Active Record”[原文如此],所以你已经用这些术语回答了你自己的问题。 否则你需要通过编写“Active Record”来实际指定你的意思。

在PHP中,Mysqli扩展提供了一次运行多个查询: mysqli::multi_query Docs

最后一个插入ID函数也存在于Mysql本身中,可以在任何SQL查询中使用,然后称为LAST_INSERT_ID() Mysql Docs

INSERT INTO contact;
INSERT INTO order SET contact_ID = LAST_INSERT_ID();

也许这是您正在寻找的信息。

附加信息

不要忘记检查交易是否成功:

$this->db->trans_complete();

    if($this->db->trans_status() === FALSE){// Check Transaction Result successful                          
         echo "<br>------- INFO WAS >>>>>>> NOT INSERTED <<<<<<< -------<br>";
    }else{
         echo "<br>------- >>>>>>> TRANSACTION SUCCESSFUL <<<<<<< -------<br>";
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM