diff --git a/src/Custom.php b/src/Custom.php index ae75ac8..572ac51 100644 --- a/src/Custom.php +++ b/src/Custom.php @@ -18,6 +18,7 @@ class Custom * @param array $parameters The parameters for the query * @param PDO $pdo The database connection on which the query should be run * @return PDOStatement The result of executing the query + * @throws DocumentException If the query execution is unsuccessful */ public static function runQuery(string $query, array $parameters, PDO $pdo): PDOStatement { @@ -28,8 +29,9 @@ class Custom $stmt->bindValue($key, $value); } if ($debug) echo '
SQL: ' . $stmt->queryString . ''; - $stmt->execute(); - return $stmt; + if ($stmt->execute()) return $stmt; + $keyword = explode(' ', $query, 2)[0]; + throw new DocumentException("Error executing $keyword statement: " . $stmt->errorCode()); } /** @@ -87,8 +89,12 @@ class Custom */ public static function nonQuery(string $query, array $parameters, ?PDO $pdo = null): void { - $stmt = self::runQuery($query, $parameters, $pdo ?? Configuration::dbConn()); - if ($stmt->errorCode()) throw new DocumentException('Error executing command: ' . $stmt->errorCode()); + try { + $stmt = self::runQuery($query, $parameters, is_null($pdo) ? $actualPDO = Configuration::dbConn() : $pdo); + $stmt = null; + } finally { + if (isset($actualPDO)) $actualPDO = null; + } } /** @@ -105,9 +111,6 @@ class Custom public static function scalar(string $query, array $parameters, Mapper $mapper, ?PDO $pdo = null): mixed { $stmt = self::runQuery($query, $parameters, $pdo ?? Configuration::dbConn()); - if ($stmt->errorCode()) { - throw new DocumentException('Error retrieving scalar value: ' . $stmt->errorCode()); - } if ($stmt->rowCount() > 0) { $first = $stmt->fetch(PDO::FETCH_NUM); return $first ? $mapper->map($first) : false; diff --git a/src/DocumentList.php b/src/DocumentList.php index 58eb9a7..60a7658 100644 --- a/src/DocumentList.php +++ b/src/DocumentList.php @@ -13,16 +13,16 @@ use PDOStatement; * * @template TDoc The domain class for items returned by this list */ -readonly class DocumentList +class DocumentList { /** * Constructor * - * @param PDO $pdo The database connection against which the query was opened - * @param PDOStatement $result The result of the query + * @param PDO|null $pdo The database connection against which the query was opened + * @param PDOStatement|null $result The result of the query * @param Mapper