From ffffab643e031524b6fdfe0c39adae1f6c8e9c4d Mon Sep 17 00:00:00 2001 From: Simon Rettberg Date: Wed, 8 Jun 2016 18:33:30 +0200 Subject: [install] Implement install scripts for most modules --- inc/database.inc.php | 29 ++++++++++++++++++++++------- 1 file changed, 22 insertions(+), 7 deletions(-) (limited to 'inc/database.inc.php') diff --git a/inc/database.inc.php b/inc/database.inc.php index ee45f6c0..4a5821f4 100644 --- a/inc/database.inc.php +++ b/inc/database.inc.php @@ -8,19 +8,24 @@ class Database { /** - * * @var \PDO Database handle */ private static $dbh = false; + /* + * @var \PDOStatement[] + */ private static $statements = array(); + private static $returnErrors; + private static $lastError = false; /** * Connect to the DB if not already connected. */ - public static function init($returnSuccess = false) + public static function init($returnErrors = false) { if (self::$dbh !== false) return true; + self::$returnErrors = $returnErrors; try { if (CONFIG_SQL_FORCE_UTF8) { self::$dbh = new PDO(CONFIG_SQL_DSN, CONFIG_SQL_USER, CONFIG_SQL_PASS, array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8")); @@ -28,7 +33,7 @@ class Database self::$dbh = new PDO(CONFIG_SQL_DSN, CONFIG_SQL_USER, CONFIG_SQL_PASS); } } catch (PDOException $e) { - if ($returnSuccess) + if (self::$returnErrors) return false; Util::traceError('Connecting to the local database failed: ' . $e->getMessage()); } @@ -76,6 +81,14 @@ class Database return self::$dbh->lastInsertId(); } + /** + * @return string|bool return last error returned by query + */ + public static function lastError() + { + return self::$lastError; + } + /** * Execute the given query and return the corresponding PDOStatement object * Note that this will re-use PDOStatements, so if you run the same @@ -94,15 +107,17 @@ class Database self::$statements[$query]->closeCursor(); } if (self::$statements[$query]->execute($args) === false) { - if ($ignoreError) + self::$lastError = implode("\n", self::$statements[$query]->errorInfo()); + if ($ignoreError || self::$returnErrors) return false; - Util::traceError("Database Error: \n" . implode("\n", self::$statements[$query]->errorInfo())); + Util::traceError("Database Error: \n" . self::$lastError); } return self::$statements[$query]; } catch (Exception $e) { - if ($ignoreError) + self::$lastError = '(' . $e->getCode() . ') ' . $e->getMessage(); + if ($ignoreError || self::$returnErrors) return false; - Util::traceError("Database Error: \n" . $e->getMessage()); + Util::traceError("Database Error: \n" . self::$lastError); } return false; } -- cgit v1.2.3-55-g7522