From 1eec52c4c6aef65ae9a2df75604eda3090fc76a0 Mon Sep 17 00:00:00 2001 From: Pavel Djundik Date: Sun, 20 Feb 2022 17:14:29 +0200 Subject: [PATCH] Use transactions when simulating queries --- src/QueryReflection/MysqliQueryReflector.php | 4 ++++ src/QueryReflection/PdoQueryReflector.php | 12 ++++++++++++ 2 files changed, 16 insertions(+) diff --git a/src/QueryReflection/MysqliQueryReflector.php b/src/QueryReflection/MysqliQueryReflector.php index e227824e5..b5be93086 100644 --- a/src/QueryReflection/MysqliQueryReflector.php +++ b/src/QueryReflection/MysqliQueryReflector.php @@ -131,6 +131,8 @@ private function simulateQuery(string $queryString) return $this->cache[$queryString] = null; } + $this->db->begin_transaction(\MYSQLI_TRANS_START_READ_ONLY); + try { $result = $this->db->query($simulatedQuery); @@ -144,6 +146,8 @@ private function simulateQuery(string $queryString) return $this->cache[$queryString] = $resultInfo; } catch (mysqli_sql_exception $e) { return $this->cache[$queryString] = $e; + } finally { + $this->db->rollback(); } } } diff --git a/src/QueryReflection/PdoQueryReflector.php b/src/QueryReflection/PdoQueryReflector.php index 087edbcc2..de5cb7e28 100644 --- a/src/QueryReflection/PdoQueryReflector.php +++ b/src/QueryReflection/PdoQueryReflector.php @@ -139,10 +139,22 @@ private function simulateQuery(string $queryString) return $this->cache[$queryString] = null; } + try { + $this->pdo->beginTransaction(); + } catch (PDOException $e) { + // not all drivers may support transactions + } + try { $stmt = $this->pdo->query($simulatedQuery); } catch (PDOException $e) { return $this->cache[$queryString] = $e; + } finally { + try { + $this->pdo->rollBack(); + } catch (PDOException $e) { + // not all drivers may support transactions + } } $this->cache[$queryString] = [];