如何将数据从主键列插入到外键

时间:2014-09-25 03:54:19

标签: php mysql codeigniter activerecord

我在插入数据时从我想要的表单插入数据,因此应该增加在第二列中用作外键的第一列主要ID

我试过这段代码但没有工作

第一个表格代码

$this->db->query("insert into af_ads (ad_title,ad_pic,ad_description)
 values ('$title','$filepath','$description')");

第二个表格代码

   $this->db->query("insert into af_category (cat_type,ad_id_fk)
     values ('$category','ad_id')");

注意:我想将ad_id插入ad_id_fk

2 个答案:

答案 0 :(得分:1)

试试这个:

// Your first query 
$this->db->query("insert into af_ads(ad_id, ad_title, ad_pic, ad_description)
     values ('', '$title', '$filepath', '$description')");

$ad_id = $this->db->insert_id(); // This returns the id that is automatically assigned to that record

// Use the id as foreign key in your second insert query
$this->db->query("insert into af_category (cat_type,ad_id_fk)
 values ('$category', $ad_id)");

答案 1 :(得分:0)

MySQL提供LAST_INSERT_ID函数作为从前一个INSERT语句中检索为AUTO_INCREMENT列生成的值的方法。

许多客户端库使这种方便可用(例如PDO lastInsertId功能。)

(我不熟悉CodeIgniter或ActiveRecord,所以我无法说明它是如何提供的。

您的代码看起来像是在使用PDO界面......但我对此并不确定。

 # either we need to check return from functions for errors
 # or we can have PDO do the checks and throw an exception
 $this->db->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);

 # attempt insert which will generate AUTO_INCREMENT value
 $this->db->query("INSERT (ad_id, ... ) VALUES (NULL, ...)");

 # if previous insert successfully inserted a row (or rows)
 $ad_id = $this->db->lastInsertId();

您确实需要检查上一次插入是否成功。如果您不打算自行检查代码,那么PDO会提供一种自动执行此检查的机制,并在发生MySQL错误时抛出异常。

我避免复制原始代码,看起来它很容易受到SQL注入攻击。如果您正在使用PDO,则可以有效地使用带有绑定占位符的预准备语句,而不是在SQL文本中包含值。