Merge branch 'master' of git://github.com/Froxlor/Froxlor
This commit is contained in:
@@ -38,18 +38,29 @@ class Database {
|
||||
*/
|
||||
private static $_link = null ;
|
||||
|
||||
/**
|
||||
* indicator whether to use root-connection or not
|
||||
*/
|
||||
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
|
||||
* and display the error nicely on the panel
|
||||
*
|
||||
* @param PDOStatement $stmt
|
||||
* @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 {
|
||||
$stmt->execute($params);
|
||||
} catch (PDOException $e) {
|
||||
self::_showerror($e);
|
||||
self::_showerror($e, $showerror);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -58,10 +69,36 @@ class Database {
|
||||
*
|
||||
* @return int
|
||||
*/
|
||||
public static function num_rows($stmt) {
|
||||
public static function num_rows() {
|
||||
return Database::query("SELECT FOUND_ROWS()")->fetchColumn();
|
||||
}
|
||||
|
||||
/**
|
||||
* enabled the usage of a root-connection to the database
|
||||
* Note: must be called *before* any prepare/query/etc.
|
||||
* and should be called again with 'false'-parameter to resume
|
||||
* the 'normal' database-connection
|
||||
*
|
||||
* @param bool $needroot
|
||||
* @param int $dbserver optional
|
||||
*/
|
||||
public static function needRoot($needroot = false, $dbserver = 0) {
|
||||
// force re-connecting to the db with corresponding user
|
||||
// and set the $dbserver (mostly to 0 = default)
|
||||
self::_setServer($dbserver);
|
||||
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
|
||||
* call like "Database::function()"
|
||||
@@ -72,7 +109,7 @@ class Database {
|
||||
* @return mixed
|
||||
*/
|
||||
public static function __callStatic($name, $args) {
|
||||
$callback = array(self::getDB(), $name);
|
||||
$callback = array(self::getDB(self::$_needroot), $name);
|
||||
$result = null;
|
||||
try {
|
||||
$result = call_user_func_array($callback, $args );
|
||||
@@ -118,9 +155,9 @@ class Database {
|
||||
|
||||
// either root or unprivileged user
|
||||
if ($root) {
|
||||
$user = $sql_root[0]['user'];
|
||||
$password = $sql_root[0]['password'];
|
||||
$host = $sql_root[0]['host'];
|
||||
$user = $sql_root[self::$_dbserver]['user'];
|
||||
$password = $sql_root[self::$_dbserver]['password'];
|
||||
$host = $sql_root[self::$_dbserver]['host'];
|
||||
} else {
|
||||
$user = $sql["user"];
|
||||
$password = $sql["password"];
|
||||
@@ -166,8 +203,9 @@ class Database {
|
||||
* display a nice error if it occurs and log everything
|
||||
*
|
||||
* @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;
|
||||
|
||||
/**
|
||||
@@ -183,6 +221,7 @@ class Database {
|
||||
@fwrite($sqllog, date('d.m.Y H:i', time())." --- ".str_replace("\n", " ", $error->getMessage())."\n");
|
||||
@fclose($sqllog);
|
||||
|
||||
if ($showerror) {
|
||||
if (!isset($_SERVER['SHELL']) || (isset($_SERVER['SHELL']) && $_SERVER['SHELL'] == '')) {
|
||||
// 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');
|
||||
@@ -195,3 +234,4 @@ 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");
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user