ehance new PDO database class

Signed-off-by: Michael Kaufmann (d00p) <d00p@froxlor.org>
This commit is contained in:
Michael Kaufmann (d00p)
2013-10-30 14:38:04 +01:00
parent 8172cb8fc0
commit b618dd4e00

View File

@@ -43,18 +43,24 @@ class Database {
*/ */
private static $_needroot = false; private static $_needroot = false;
/**
* indicator which database-server we're on (not really used)
*/
private static $_dbserver = 0;
/** /**
* Wrapper for PDOStatement::execute so we can catch the PDOException * Wrapper for PDOStatement::execute so we can catch the PDOException
* and display the error nicely on the panel * and display the error nicely on the panel
* *
* @param PDOStatement $stmt * @param PDOStatement $stmt
* @param array $params (optional) * @param array $params (optional)
* @param bool $showerror suppress errordisplay (default true)
*/ */
public static function pexecute(&$stmt, $params = null) { public static function pexecute(&$stmt, $params = null, $showerror = true) {
try { try {
$stmt->execute($params); $stmt->execute($params);
} catch (PDOException $e) { } catch (PDOException $e) {
self::_showerror($e); self::_showerror($e, $showerror);
} }
} }
@@ -63,7 +69,7 @@ class Database {
* *
* @return int * @return int
*/ */
public static function num_rows($stmt) { public static function num_rows() {
return Database::query("SELECT FOUND_ROWS()")->fetchColumn(); return Database::query("SELECT FOUND_ROWS()")->fetchColumn();
} }
@@ -74,13 +80,25 @@ class Database {
* the 'normal' database-connection * the 'normal' database-connection
* *
* @param bool $needroot * @param bool $needroot
* @param int $dbserver optional
*/ */
public static function needRoot($needroot = false) { public static function needRoot($needroot = false, $dbserver = 0) {
// force re-connecting to the db with corresponding user // force re-connecting to the db with corresponding user
self::$_link = null; // and set the $dbserver (mostly to 0 = default)
self::_setServer($dbserver);
self::$_needroot = $needroot; self::$_needroot = $needroot;
} }
/**
* set the database-server (relevant for root-connection)
*
* @param int $dbserver
*/
private static function _setServer($dbserver = 0) {
self::$_dbserver = $dbserver;
self::$_link = null;
}
/** /**
* let's us interact with the PDO-Object by using static * let's us interact with the PDO-Object by using static
* call like "Database::function()" * call like "Database::function()"
@@ -137,9 +155,9 @@ class Database {
// either root or unprivileged user // either root or unprivileged user
if ($root) { if ($root) {
$user = $sql_root[0]['user']; $user = $sql_root[self::$_dbserver]['user'];
$password = $sql_root[0]['password']; $password = $sql_root[self::$_dbserver]['password'];
$host = $sql_root[0]['host']; $host = $sql_root[self::$_dbserver]['host'];
} else { } else {
$user = $sql["user"]; $user = $sql["user"];
$password = $sql["password"]; $password = $sql["password"];
@@ -185,8 +203,9 @@ class Database {
* display a nice error if it occurs and log everything * display a nice error if it occurs and log everything
* *
* @param PDOException $error * @param PDOException $error
* @param bool $showerror if set to false, the error will be logged but we go on
*/ */
private static function _showerror($error) { private static function _showerror($error, $showerror = true) {
global $theme; global $theme;
/** /**
@@ -202,6 +221,7 @@ class Database {
@fwrite($sqllog, date('d.m.Y H:i', time())." --- ".str_replace("\n", " ", $error->getMessage())."\n"); @fwrite($sqllog, date('d.m.Y H:i', time())." --- ".str_replace("\n", " ", $error->getMessage())."\n");
@fclose($sqllog); @fclose($sqllog);
if ($showerror) {
if (!isset($_SERVER['SHELL']) || (isset($_SERVER['SHELL']) && $_SERVER['SHELL'] == '')) { if (!isset($_SERVER['SHELL']) || (isset($_SERVER['SHELL']) && $_SERVER['SHELL'] == '')) {
// if we're not on the shell, output a nicer error-message // if we're not on the shell, output a nicer error-message
$err_hint = file_get_contents(dirname($sl_dir).'/templates/'.$theme.'/misc/dberrornice.tpl'); $err_hint = file_get_contents(dirname($sl_dir).'/templates/'.$theme.'/misc/dberrornice.tpl');
@@ -213,4 +233,5 @@ class Database {
} }
die("We are sorry, but a MySQL - error occurred. The administrator may find more information in in the sql-error.log in the logs/ directory"); die("We are sorry, but a MySQL - error occurred. The administrator may find more information in in the sql-error.log in the logs/ directory");
} }
}
} }