CodeIgniter - 使用事务插入多个表
Posted
技术标签:
【中文标题】CodeIgniter - 使用事务插入多个表【英文标题】:CodeIgniter - Multiple table insert using transactions 【发布时间】:2012-11-05 23:54:07 【问题描述】:我目前正在关注关于在 php / mysql 中创建论坛的教程......并且我正在尝试将它实现到我的 CodeIgniter 项目中。
我遇到了一个我以前从未处理过的问题,交易......我已经阅读了关于 codeigniters 交易的文档,但考虑到我需要转换的代码,我并没有真正理解它。
我想知道是否有人可以将下面的代码转换为 codeigniters 事务代码,我自己尝试过,但它使用多个表,我完全糊涂了。
任何帮助都会很棒,代码如下:
$query = "BEGIN WORK;";
$result = mysql_query($query)
if(!$result)
echo 'An error has occured';
else
$sql = "INSERT INTO topics(t_subeject,date,cat) VALUES ($_POST['subject'],NOW(),$_POST['cat'])";
$result = mysql_query($sql);
if(!$result)
echo 'An error has occured';
$sql = "ROLLBACK;";
$result = mysql_query($query)
else
$topid = mysql_insery_id();
$sql = "INSERT INTO posts(content, date) VALUES ($_POST['content'],NOW())";
$result = mysql_query($sql);
if(!$result)
echo 'An error has occured';
$sql = "ROLLBACK;";
$result = mysql_query($sql);
else
$sql = "COMMIT;";
$result = mysql_query($sql);
echo 'Insert successful!';
【问题讨论】:
【参考方案1】:如果 INSERT 失败,它将自动执行 ROLLBACK。这就是您首先使用事务的原因。无需明确检查。所以最后,这应该是它的全部:
$this->db->trans_start();
$this->db->query("INSERT INTO topics(t_subeject,date,cat) VALUES ($_POST['subject'],NOW(),$_POST['cat'])");
$topid=$this->db->insert_id();
$this->db->query("INSERT INTO posts(content, date) VALUES ($_POST['content'],NOW())");
$this->db->trans_complete();
...从您的模型类中。所以如果第一个 INSERT 已经失败,它不会执行第二个。
http://ellislab.com/codeigniter/user_guide/database/transactions.html
【讨论】:
嘿,谢谢你......这让事情变得更容易了,在第一次查询之后,我将如何获取 mysql_insert_id,如果第一次查询失败,它还会运行第二次吗? 啊,完美...非常感谢! 不客气。并确保您的表引擎支持事务。 MyISAM 没有,InnoDB 有。 哈哈是的,我发现这很难,花了我几个小时盯着屏幕嘿嘿以上是关于CodeIgniter - 使用事务插入多个表的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 codeigniter 导入 CSV 文件并将数据插入到多个表中?
使用 CodeIgniter 框架将数据插入到具有外键的多个表中