Magento 2 如何从查询返回对象中获取当前事务隔离级别
Magento 2 事务隔离级别值提取解决方案
你调用$connection->query()返回的是Magento封装的PDO Statement对象,无法直接通过读取对象属性拿到查询结果,需要调用结果集读取方法提取目标值。
现有代码修正方案
直接在原有代码后补充fetchColumn()调用即可拿到隔离级别字符串:
$resource = $objectManager->get('Magento\Framework\App\ResourceConnection'); $connection = $resource->getConnection(); $isolationLevelStmt = $connection->query("SELECT @@transaction_isolation"); // 提取第一行第一列的查询结果 $isolationLevel = $isolationLevelStmt->fetchColumn(); // 输出验证 var_dump($isolationLevel);
推荐规范写法
Magento 2 官方不建议直接使用ObjectManager获取实例,优先通过构造函数依赖注入的方式获取资源连接实例:
// 对应类的构造函数注入 public function __construct( \Magento\Framework\App\ResourceConnection $resourceConnection ) { $this->connection = $resourceConnection->getConnection(); } // 业务逻辑中调用查询 public function getTransactionIsolationLevel() { $stmt = $this->connection->query("SELECT @@transaction_isolation"); return $stmt->fetchColumn(); }
补充说明
- 如果你使用的是MySQL 5.7以下的旧版本,系统变量名是
tx_isolation,可以把查询语句替换为SELECT @@tx_isolation兼容旧版本 - 如果需要读取完整行结果,也可以调用
fetch()方法返回关联数组格式的结果
内容的提问来源于stack exchange,提问作者Peter G
相关产品推荐
相关产品推荐

