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

时间:2012-09-17 16:26:25

标签: php mysql codeigniter

我不确定如何使用活动记录或使用手动sql处理此问题。我想要做的是在'联系人'中添加一条记录。具有自动递增ID的表,然后将记录添加到" order"带有相应“联系人”ID的表格。记录身份。

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

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

3 个答案:

答案 0 :(得分:3)

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

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

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

以下是一个根据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(); 

答案 1 :(得分:1)

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

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

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

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

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

答案 2 :(得分:0)

其他信息

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

$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>";
    }