diff --git a/Command.php b/Command.php index 6391674..c04f623 100644 --- a/Command.php +++ b/Command.php @@ -177,7 +177,7 @@ class Command extends Component private function _execute(): bool|int { try { - $client = $this->connection->getTransactionClient(); + $client = $this->connection->getConnection(); if (($prepare = $client->prepare($this->sql)) === false) { throw new Exception($client->errorInfo()[1]); } @@ -194,9 +194,7 @@ class Command extends Component } return $this->error($throwable); } finally { - if (isset($client) && !$client->inTransaction()) { - $this->connection->release($client); - } + $this->connection->release($client ?? null); } } diff --git a/Connection.php b/Connection.php index ecfcc17..dcd2190 100644 --- a/Connection.php +++ b/Connection.php @@ -123,7 +123,11 @@ class Connection extends Component */ public function getConnection(): PDO { - return $this->pool()->get($this->cds); + if (!$this->inTransaction()) { + return $this->pool()->get($this->cds); + } else { + return $this->getTransactionClient(); + } } @@ -136,7 +140,7 @@ class Connection extends Component if ($this->storey == 0) { /** @var PDO $pdo */ $pdo = Context::get($this->cds); - if ($pdo !== null && !$pdo->inTransaction()) { + if ($pdo instanceof PDO && !$pdo->inTransaction()) { $pdo->beginTransaction(); } } @@ -226,12 +230,14 @@ class Connection extends Component /** - * * 回收链接 * @throws */ public function release(?PDO $PDO): void { + if ($PDO === null || $PDO->inTransaction()) { + return; + } $this->pool()->push($this->cds, $PDO); } @@ -243,7 +249,7 @@ class Connection extends Component */ public function clear_connection(): void { - $this->pool()->clean($this->cds); + $this->pool()->flush($this->cds, 0); }