gpt4 book ai didi

php - Codeigniter 3 个连续事务不起作用

转载 作者:可可西里 更新时间:2023-11-01 08:39:59 28 4
gpt4 key购买 nike

首先是一些上下文。我有一个 Controller 来管理站点。网站可以参与研究。当站点参与研究时,将创建一个空的调查对象。参与有指向该调查的链接。

Controller 代码的简化版本:

$survey = new Survey();
//Set some variables

$savedSurvey = $this->Surveymodel->persist($survey);

if ($savedSurvey)
$participation->survey_id = $savedSurvey->id;

$savedParticipation = $this->Participationmodel->persist($participation);

persist 函数相当简单,对于所有模型看起来都一样。

$sql = "INSERT INTO table (a, b, c) VALUES (?, ?, ?)";
$params = array($object->a, $object->b, $object->c);

$this->db->trans_start();
$this->db->query($sql, $params);
$object->id = $this->db->insert_id();
$this->db->trans_complete();

if ($this->db->trans_status() === FALSE) {
error_log('SURVEY INSERT KO');
return false;
} else {
error_log('SURVEY INSERT OK');
return $object;
}

这是简单的事务使用,与 CI 文档中描述的完全一样。 PHP错误日志显示survey插入成功,参与也插入成功。然而,mysql 日志描绘了一个不同的故事:

55 Query    START TRANSACTION
55 Query INSERT INTO survey (survey_class_id, status, created_at)
VALUES ('2', 1, NOW())
55 Query COMMIT
55 Query INSERT INTO participation (study_id, site_id, fs_folder_id, survey_id, reference, created_at)
VALUES (1, '33', NULL, 49, 'REDVILLE', NOW())
55 Quit

参与插入不仅没有事务启动也没有提交,而且代码返回操作成功(相当误导),没有事务的查询实际上不做插入。表中没有参与记录,但自动索引增加。就好像第二个持久化实际上失败了,并且有一个事务启动和一个回滚没有显示在 mysql 日志中。但是,如果我手动复制 mysql 日志中的查询并执行它,则插入有效并且记录被添加到表中。

我在 CI 论坛上询问过并搜索过类似的问题,但没有找到任何东西。

  1. 如果我不使用事务,它就可以工作(对我来说不是解决方案)
  2. 我已经尝试过自动 CI 交易和手动交易,结果相同。
  3. 这不是模型问题。如果我尝试插入两个参与而不是先插入调查再插入参与,那么实际上只会添加第一个。
  4. 我在 CI v2 中没有这个错误,这让我想知道它是否是 v3 的错误,但我发现之前不太可能没有人遇到过这个问题,因为这是一个非常基本的操作。

我没有想法来测试为什么这不起作用,并且可以使用具有外貌和/或 CI3 处理交易方式经验的人的一些输入。

最佳答案

将我的 php 版本从 5.5.10 升级到 5.6.10 时,错误消失了

为了更准确地估计修复错误的版本,我尝试了 PHP 5.5.22,它可以正常工作(对于 MAMP,无法获得介于 5.5.10 和 5.5.10 之间的任何东西)。

我检查了 PHP ChangeLog 并注意到版本 5.5.12 的这一点:

mysqli: Fixed problem in mysqli_commit()/mysqli_rollback() with second parameter (extra comma) and third parameters (lack of escaping).

它没有链接到任何进一步的细节,但它是更改日志中唯一似乎与我的问题相关并且与我有错误的版本(5.5.10 之前和 5.5.22 之后)相匹配的东西。

关于php - Codeigniter 3 个连续事务不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35752505/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com