打开第二个数据库连接时外键锁定事务超时

2024-02-07

我遇到一个问题,涉及一个类中的数据库事务,该事务由于在事务中打开辅助数据库连接而超时;当我添加外键约束时,问题开始出现。并且,测试使用:

SET foreign_key_checks = 0;

我已经能够证实这一点。

我的数据库类如下所示(我放弃了所有方法):

class Db { 
function __construct($config) {
    $this->config = $config;
}

private function connect($config) {$dsn = 'mysql:host=' . $config['host'] . ';dbname=' . $config['dbname'] . ';charset=utf8';

$options = array(
            // PDO::ATTR_PERSISTENT => true,
            PDO::ATTR_EMULATE_PREPARES => false, 
            PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
           PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC
        );

$dbh = new PDO($dsn, $config['username'], $config['password'], $options);
$dbh->exec("SET NAMES utf8;"); 

return $dbh;
 }      
}

我的模型如下所示:

class Model {

    function __construct() {
        $this->db = new Db(array('host'=>DB_HOST,'dbname'=>DB_NAME,'username'=>DB_USERNAME,'password'=>DB_PASSWORD));
    }

}

下面的代码执行一些逻辑,然后插入到 Question_orders 表中: Question_orders 有一个列 Question_id,带有外键索引,该索引引用父表 questions;我认为问题是 Assessment_Question_Orders 扩展了模型并创建了一个新的数据库连接?任何关于如何维护交易和外键方面的想法将不胜感激。

  class This_Is_A_Problem extends Model() {

       public function __construct() {
             parent::construct();
           }

       public function problemFunction()  {

    /*variable init code left out*/

    $this->db->beginTransaction();
    $db_result = false;
    try {

    $db_result = $this->db->insert('questions', $questions_data);
    $new_insert_id = $this->db->lastInsertId();

    $assessment_question_orders = new Assessment_Question_Orders();

 $question_number = $assessment_question_orders->insertSingleQuestionOrder($module_id, $new_insert_id);

    $db_result = $this->db->commit();

    }
    } catch (PDOException $e) {

     $this->db->rollBack();

    }}}

一个线程(通常)应该只有一个到数据库的连接。所以我推荐以下模式之一:

计划 A:将单个 $db 传递到所有类中:

$db = new PDO(...);
$my_obj = new My_Class($db);  -- $db is saved in $this->db for use within the methods of My_Class.

计划 B:带有 getter 方法的单例 Db 类:

// Singleton (of sorts)
class Db
{
    private static $db;
    function __construct()
    {
        self::$db = new PDO(...);
        // A variant would include "lazy" instantiation of self::$Db. 
    }
    function Get_Db()  { return self::$db; } // All calls get the same `db`
}
class My_class
{
    function My_Method()
    {
        $db = Db::Get_Db();
        $db->...
    }
}

new Db();   // one time call at start of program

在单个程序中很少需要有两个数据库连接。 A 计划很容易实现这一点。 (但是看看你是否能避免它——你现在因此陷入了麻烦。)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

打开第二个数据库连接时外键锁定事务超时 的相关文章

  • 当与“<”或“>”运算符一起使用时,MySQL 不使用 DATE 上的索引吗?

    我正在使用解释来测试这些查询 col 类型是 DATE 这使用索引 explain SELECT events FROM events WHERE events date 2010 06 11 这不 explain SELECT event
  • 我可以将 MAMP (MySQL) 或 XAMPP (MySQL) 与 Ruby on Rails 3 一起使用吗?

    我可以将 MAMP MySQL 或 XAMPP MySQL 与 Ruby on Rails 3 一起使用吗 我从 MYSQL com 安装了 MySQL 但遇到了很多麻烦 所以我喜欢使用 MAMP XAMPP Mysql 有人这样做吗 另外
  • 何时在 mysql 中使用 Union [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 对于 Union 您会在什么现实情况下使用它 因为对我来说 对具有不同列用途 含义的两个表中的两个选择查询使用联合是没有意义的 例如
  • 在上下文中提取搜索字符串

    我正在尝试执行 MySQL 查询 在上下文中提取搜索字符串 因此 如果搜索是 mysql 我想从 body 列返回类似的内容 下载后只需几分钟MySQL安装程序即可使用 这就是我现在得到的 但它不起作用 因为它只是从正文字段中获取前 20
  • 如何使用wireshark清晰捕获mysql查询sql

    因为我们使用远程开发Mysql服务器 所以不能轻易检查查询sql 如果使用本地服务器可以tail f general log file查看调用某个http接口时执行了哪些sql 所以我安装了一个wireshark捕获这些从本地发送的查询sq
  • Laravel 5.4 升级 - 违反完整性约束 - 列不能为空

    奇怪的是 所有这些都在 5 2 中工作 但我不知道可以改变什么来实现这一点 下面是错误和正在插入的数组 SQLSTATE 23000 Integrity constraint violation 1048 Column gender can
  • 如何将行变成列?

    我有一个数据库 其中存储分组到项目中的关键字以及与每个关键字相关的数据 然后我显示每个项目的数据网格 每个关键字一行和几列 全部从同一个表 数据 中检索 我有 4 个表 关键字 项目 group keywords 和数据 keywords
  • AWS RDS MySql - 如何在设置“公开可用”后允许访问

    刚刚使用默认设置和用户 密码创建了新的 AWS RDS MySql 实例 我也将其设置为publicly available并在此过程中创建新的 VPC 目前无法从我的笔记本电脑连接到此 RDS mysql h endpoint u myu
  • 如何使用 Mysql Python 连接器检索二进制数据?

    如果我在 MySQL 中创建一个包含二进制数据的简单表 CREATE TABLE foo bar binary 4 INSERT INTO foo bar VALUES UNHEX de12 然后尝试使用 MySQL Connector P
  • 使用来自另一个数据库的选择查询更新 mysql 表

    我有两个数据库 我想用另一个数据库表中的值更新一个表 我正在使用以下查询 但它不起作用 UPDATE database1 table1 SET field2 database2 table1 field2 WHERE database1 t
  • PDO语法错误

    我在一个项目中使用 PDO 但提交时出现语法错误 这是我的代码
  • WHERE NOT EXIST 附近的语法错误

    我在堆栈中搜索 但没有一个达到最终答案 我的查询是这样的 INSERT INTO user username frequence autoSend VALUES feri2 3 1 WHERE NOT EXISTS SELECT FROM
  • mysql-connector-c++ - “get_driver_instance”不是“sql::mysql”的成员

    我是 C 的初学者 我认为学习的唯一方法就是接触一些代码 我正在尝试构建一个连接到 mysql 数据库的程序 我在 Linux 上使用 g 没有想法 我运行 make 这是我的错误 hello cpp 38 error get driver
  • 从 call_log 中获取最大并发通话数

    我需要帮助在 MySQL 5 0 77 中编写一个查询 根据下面所示的数据 办公室一天的通话量 返回并发电话呼叫的峰值数量 我只是想知道一天中任何特定时间同时打电话的人数最多是多少 首先 这是 MySQL 表 CREATE TABLE ca
  • JDBC 错误:在结果集开始之前[重复]

    这个问题在这里已经有答案了 我在 Java Eclipse 中收到错误消息 我在 MySql 中有一个数据库 它有列 String user name int id time int id desk int user password 我想
  • Dapper 或 MySql 未找到包含句号“.”的存储过程。

    我有一个简单的 C 控制台 它使用 Dapper ORM 调用本地 MySql 数据库 以执行名为的存储过程users UserCreate 但是 当运行查询时 我收到一个异常 在数据库 用户 中找不到过程或函数 UserCreate Bu
  • “修改列”与“更改列”

    我知道 我们不能使用重命名列MODIFY COLUMN语法 但我们可以使用CHANGE COLUMN syntax 我的问题是 主要用途是什么modify syntax 例如 ALATER TABLE tablename CHANGE co
  • MySQL:如何仅获取正值的平均值?

    假设我有 INT 列 并且我使用 1 来表示插入时没有可用数据 我想获得该列中所有 0 或更大值的平均值 这可能吗 Thanks 我忘了提及 我正在与其他 AVG 一起执行此操作 因此从选项卡中选择 avg a avg b avg d 所以
  • 使用 MYSQL 将 h:mm pm/am 时间格式插入数据库

    我正在尝试将以 h mm am pm 格式写入的时间插入到存储为标准 DATETIME 格式 hh mm ss 的数据库中 但我不知道如何将发布的时间转换为标准格式所以数据库会接受它 这是我到目前为止一直在尝试的 title POST in
  • rake db 问题:迁移 -

    我无法为 Ruby on Rails 设置 MySQL 数据库 设置数据库并确保 config database yml 文件匹配后 我遇到了以下错误消息 U Rails alpha gt rake db migrate trace in

随机推荐

  • 测试初始化​​中的 EntityFramework 错误:多语句事务中不允许 CREATE DATABASE 语句

    我正在尝试构建一个快速测试 每次运行时都会删除并重新创建数据库 我有以下内容 TestClass public class PocoTest private TransactionScope transactionScope private
  • 检测程序何时打开 fifo

    我遇到一种情况 我需要检查 fifo 的另一侧是否已打开它 但是我不能使用 open 因为否则程序将开始执行操作 为什么我必须这样做 我有一个程序 监视器 来启动服务器程序 都是我创建的 监视器使用此 fifo 进行通信 因为监视器可以在服
  • 分配大的 DMA 缓冲区

    我想分配一个大的 DMA 缓冲区 大小约为 40 MB 当我使用dma alloc coherent 它失败了 我看到的是 cut here WARNING at mm page alloc c 2106 alloc pages nodem
  • CORS - Angular 和 Express 的 http OPTIONS 错误

    我正在尝试从 Angularjs 客户端向我的 API 发送 POST 我在另一个域中运行的服务器上有此配置 app use function req res next res setHeader Access Control Allow
  • 如何使用 POI 删除合并区域?

    我知道我们可以使用sheet addMergedRegion range 合并单元格 我想知道如何删除合并 我们可以使用sheet removeMergedRegion int 如果是 那么告诉我应该争论什么 合并单元格中存在的数据将会发生
  • 在 akka.net 中立即触发多个线程

    我不确定这是否与 akka net 或 TPL 更多相关 但我将使用 actor 作为示例来澄清问题 简而言之 问题是 有什么方法可以告诉 akka net 一次触发比我实际拥有的 CPU 核心更多的线程吗 这是示例代码和详细信息 我目前使
  • D3 和​​ jQuery 有什么区别?

    参考这个例子 http vallandingham me stepper steps html http vallandingham me stepper steps html 看起来 D3 和 jQuery 库非常相似 因为它们都以对象链
  • 如何将 Visual Studio 默认为 C# 项目而不是 VB.NET?

    Visual Studio 2010 一直默认为 VB NET 项目而不是 C 我从 2008 年导入了保存的设置 该设置默认为 C 项目 但没有解决问题 我总是不小心创建了 VB NET 项目 然后打自己的脸 然后继续删除该项目并重新创建
  • 从 C 中的另一个函数调用 main 函数

    我有一个主函数 它在初始化期间运行一些函数 然后运行一个等待来自 UART 的命令的 while 循环 当我看到特定命令 比如说重置 时 我会调用一个返回值的函数 我想做以下事情 保存返回值 使用返回值再次启动主函数 main 中的函数初始
  • 将空列表列添加到 DataFrame

    类似这个问题如何向数据框中添加空列 https stackoverflow com questions 16327055 how to add an empty column to a dataframe 我有兴趣了解向 DataFrame
  • 将二维数组转换为两列数据框 pandas

    如果我有以下内容 如何使 pd DataFrame 将此数组转换为具有两列的数据框 最有效的方法是什么 我当前的方法包括将每个副本创建为一系列副本 并从中创建数据帧 由此 u 294 24 L u 294 26 R u 981 71 L u
  • 更改默认浅灰色背景颜色

    默认情况下 我在react native项目中创建的每个屏幕都使用非常浅的灰色作为其背景颜色 正如你在这里看到的 我想知道而不是我设置backgroundColor对于我项目的每个屏幕 反应本机项目中是否有一个全局位置 我可以设置backg
  • 将 META-INF\services\javax.xml.parsers.SAXParserFactory 添加到 jar

    我有一个文件夹 里面有几个类文件 我用来创建 jar 的命令是 jar cfm0 my jar MANIFEST class 现在我还想将以下内容添加到 jar META INF services javax xml parsers SAX
  • 为什么浏览器导航栏中 http:// 包含两个斜杠而 file:/// 包含三个斜杠?

    为什么http 包含两个斜杠 这只是 URL 的标准 还是有任何逻辑意义 为什么会这样file 包含三个斜杠 如file C a html The 权威成分 https www rfc editor org rfc rfc3986 sect
  • 我在哪里可以找到 Windows 7 上的 ideavim 0.41 的 .ideavimrc 文件?

    I use android studio on Windows 7 and it installed IdeaVim i used map jj
  • 为什么我们需要使用package.json? [复制]

    这个问题在这里已经有答案了 我正在尝试使用 JavaScript 来学习网络套接字site http socket io get started chat 但我不明白为什么我需要使用包 json 这是我的 package json 文件代码
  • ArangoDB 分面搜索性能

    我们正在评估 ArangoDB 在构面计算空间中的性能 还有许多其他产品能够通过特殊的 API 或查询语言执行相同的操作 马克逻辑方面 ElasticSearch 聚合 Solr 分面等 我们知道 Arango 中没有特殊的 API 来显式
  • 我如何模拟聚合物核心ajax,以进行单元测试

    我正在为我的新聚合物项目建造脚手架 并正在考虑进行单元测试 我想我会使用业力 茉莉花组合 有一个有趣的帖子在http japhr blogspot co uk 2014 03 polymer page objects and jasmine
  • 如何获取包含日期、小时和分钟的 ISO 8601 格式的当前时刻?

    最优雅的获取方式是什么ISO 8601 http en wikipedia org wiki ISO 8601当前时刻的格式化表示 UTC 它应该看起来像 2010 10 12T08 50Z Example String d DateFor
  • 打开第二个数据库连接时外键锁定事务超时

    我遇到一个问题 涉及一个类中的数据库事务 该事务由于在事务中打开辅助数据库连接而超时 当我添加外键约束时 问题开始出现 并且 测试使用 SET foreign key checks 0 我已经能够证实这一点 我的数据库类如下所示 我放弃了所