php - PHP oracle连接不回滚
问题描述
我想我对 PHP 如何传递对象或 oracle 如何工作感到困惑。我的代码有 3 个部分:
- 将数据库连接创建为全局变量的文件
- 向第三部分发送查询和参数的类。所有这些 require_once() 都是第一个文件,因此它们都应该使用相同的连接。
- 绑定参数并执行查询的抽象类。当构造(2)中的类时,它们将 db 连接从 require_once() 传递给此抽象类以供使用。
抽象类也有提交和回滚的功能。我希望当我从 (2) 回滚一个类时,所有这些类都会回滚,因为它们都使用相同的全局数据库连接。但他们没有。
我不明白什么?
数据库连接文件:
<?php
$db = ocilogon(...);
抽象数据库类
abstract class Database {
private $conn;
function __construct($conn) {
$this->conn = $conn;
}
protected function query($query, array $params = []) {
$stid = oci_parse($this->conn, $query);
foreach($vars as $var => &$val) {
oci_bind_by_name($stid, $var, $val);
}
$success = oci_execute($stid, OCI_NO_AUTO_COMMIT);
return $success ? $stid : false;
}
public function commit() {
return oci_commit($this->conn);
}
public function rollback() {
return oci_rollback($this->conn);
}
}
一个数据库类
require_once(connection_file.php);
require_once(Database.php);
class User extends Database {
function __construct() {
parent::__construct($GLOBALS['db']);
}
public function get($id) {
$query = 'SELECT * FROM users where id = :id';
$stid = $this->query($query, [':id' => $id]);
return oci_fetch_assoc($stid);
}
}
示例脚本
require_once(db_user.php);
require_once(db_payment.php);
$user = new User();
$payment = new Payment(); //Another class like User
$user->insert(...);
$payment->insert(...);
//Oops
$user->rollback();
exit;
付款不会也被回滚吗?
解决方案
推荐阅读
- python - Python逻辑如果和或相反
- javascript - 如何使用动态添加的按钮打开模态窗口 - 纯 JavaScript
- python-3.x - MXNet 安装在 windows 8.1 中的 python 上失败,platform.architecture == ('WindowsPE','64bit')
- intellij-idea - 在 IntelliJ IDEA 中的单词后放置逗号(不是通过编码)
- r - 在 R 中使用单独()时出现“未知符号”错误
- r - EC2 实例 R 内存使用情况
- php - Wordpress SSL - 请求超出了 10 个内部重定向的限制
- php - 如何使用 PHP 格式化 JSON 日期数组对象
- python-xarray - 在 xarray 中使用非索引坐标加入
- asp.net - 在 REST 中应用 PATCH 之前验证值