diff --git a/abstraction.inc.php b/abstraction.inc.php index f84f61d6..e90819d6 100644 --- a/abstraction.inc.php +++ b/abstraction.inc.php @@ -1,42 +1,116 @@ init(); + } + + function connect($server, $username, $password) { + return $this->real_connect( + (strlen($server) ? $server : ini_get("mysqli.default_host")), + (strlen("$server$username") ? $username : ini_get("mysqli.default_user")), + (strlen("$server$username$password") ? $password : ini_get("mysqli.default_pw")) + ); + } + + function result($result, $offset, $field = 0) { + $result->data_seek($offset); + $row = $result->fetch_array(); return $row[$field]; } } - $mysql = mysqli_init(); + + $mysql = new Min_MySQLi; + } elseif (extension_loaded("mysql")) { class Min_MySQL { - var $_link; - function real_connect($server, $username, $password) { return $this->_link = mysql_connect($server, $username, $password, false, 131072); } - function query($query) { return new Min_MySQLResult(mysql_query($query, $this->_link)); } - function result($result, $row, $field = 0) { return mysql_result($result->_result, $row, $field); } - function error() { return mysql_error($this->_link); } - function affected_rows() { return mysql_affected_rows($this->_link); } - function select_db($database) { return mysql_select_db($database, $this->_link); } - function real_escape_string($string) { return mysql_real_escape_string($string, $this->_link); } - function get_server_info() { return mysql_get_server_info($this->_link); } + var $_link, $_result, $server_info, $affected_rows, $error; - function fetch_field($result, $offset = null) { - $row = mysql_fetch_field($result, $offset); + function connect($server, $username, $password) { + $this->_link = @mysql_pconnect( + (strlen($server) ? $server : ini_get("mysql.default_host")), + (strlen("$server$username") ? $username : ini_get("mysql.default_user")), + (strlen("$server$username$password") ? $password : ini_get("mysql.default_password")), + 131072 // CLIENT_MULTI_RESULTS for CALL + ); + if ($this->_link) { + $this->server_info = mysql_get_server_info($this->_link); + } + return (bool) $this->_link; + } + + function query($query) { + $result = mysql_query($query, $this->_link); + if (!$result) { + $this->error = mysql_error($this->_link); + return false; + } elseif ($result === true) { + $this->affected_rows = mysql_affected_rows($this->_link); + return true; + } + return new Min_MySQLResult($result); + } + + function multi_query($query) { + return $this->_result = $this->query($query); + } + + function store_result() { + return $this->_result; + } + + function next_result() { + return false; + } + + function result($result, $offset, $field = 0) { + return mysql_result($result->_result, $offset, $field); + } + + function select_db($database) { + return mysql_select_db($database, $this->_link); + } + + function real_escape_string($string) { + return mysql_real_escape_string($string, $this->_link); + } + } + + class Min_MySQLResult { + var $_result, $_offset, $num_rows; + + function Min_MySQLResult($result) { + $this->_result = $result; + $this->_offset = 0; + $this->num_rows = mysql_num_rows($result); + } + + function fetch_assoc() { + return mysql_fetch_assoc($this->_result); + } + + function fetch_row() { + return mysql_fetch_row($this->_result); + } + + function fetch_field() { + $row = mysql_fetch_field($this->_result, $this->_offset++); $row->orgtable = $row->table; $row->orgname = $row->name; $row->charsetnr = ($row->blob ? 63 : 0); return $row; } + + function free() { + return mysql_free_result($this->_result); + } } - class Min_MySQLResult { - var $_result; - function Min_MySQLResult($result) { $this->_result = $result; } - function fetch_assoc() { return mysql_fetch_assoc($this->_result); } - function fetch_row() { return mysql_fetch_row($this->_result); } - function free_result() { return mysql_free_result($this->_result); } - function num_rows() { return mysql_num_rows($this->_result); } - } - $mysql = new Min_MySQL; -} else { + $mysql = new Min_MySQL; + +} else { + page_header(lang('No MySQL extension')); + echo "
" . lang('None of supported PHP extensions (%s) are available.', 'mysqli, mysql') . "
\n"; + page_footer("auth"); + exit; } diff --git a/auth.inc.php b/auth.inc.php index e15ec934..1b622e2a 100644 --- a/auth.inc.php +++ b/auth.inc.php @@ -14,14 +14,7 @@ if (isset($_POST["server"])) { $_SESSION["tokens"][$_GET["server"]] = array(); } -$username = $_SESSION["usernames"][$_GET["server"]]; -$password = $_SESSION["passwords"][$_GET["server"]]; -if (isset($_GET["logout"]) || !@mysql_connect( - (strlen($_GET["server"]) ? $_GET["server"] : ini_get("mysql.default_host")), - (strlen("$_GET[server]$username") ? $username : ini_get("mysql.default_user")), - (strlen("$_GET[server]$username$password") ? $password : ini_get("mysql.default_password")), - false, 131072 // CLIENT_MULTI_RESULTS for CALL -)) { +if (isset($_GET["logout"]) || !$mysql->connect($_GET["server"], $_SESSION["usernames"][$_GET["server"]], $_SESSION["passwords"][$_GET["server"]])) { page_header(lang('Login')); if (isset($_GET["logout"])) { echo " \n"; @@ -32,7 +25,7 @@ if (isset($_GET["logout"]) || !@mysql_connect(