我在插入数据时从我想要的表单插入数据,因此应该增加在第二列中用作外键的第一列主要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
答案 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文本中包含值。