LotGDocker/lotgd-web/lotgd/lib/dbwrapper_mysql.php
2020-08-17 19:16:42 -04:00

197 lines
5.1 KiB
PHP
Executable File

<?php
function db_query($sql, $die=true){
if (defined("DB_NODB") && !defined("LINK")) return array();
global $session,$dbinfo;
$dbinfo['queriesthishit']++;
$fname = DBTYPE."_query";
$starttime = getmicrotime();
$r = $fname($sql, LINK);
if (!$r && $die === true) {
if (defined("IS_INSTALLER")){
return array();
}else{
if ($session['user']['superuser'] & SU_DEVELOPER || 1){
require_once("lib/show_backtrace.php");
die(
"<pre>".HTMLEntities($sql, ENT_COMPAT, getsetting("charset", "ISO-8859-1"))."</pre>"
.db_error(LINK)
.show_backtrace()
);
}else{
die("A most bogus error has occurred. I apologise, but the page you were trying to access is broken. Please use your browser's back button and try again.");
}
}
}
$endtime = getmicrotime();
if ($endtime - $starttime >= 1.00 && ($session['user']['superuser'] & SU_DEBUG_OUTPUT)){
$s = trim($sql);
if (strlen($s) > 800) $s = substr($s,0,400)." ... ".substr($s,strlen($s)-400);
debug("Slow Query (".round($endtime-$starttime,2)."s): ".(HTMLEntities($s, ENT_COMPAT, getsetting("charset", "ISO-8859-1")))."`n");
}
unset($dbinfo['affected_rows']);
$dbinfo['affected_rows']=db_affected_rows();
$dbinfo['querytime'] += $endtime-$starttime;
return $r;
}
//& at the start returns a reference to the data array.
//since it's possible this array is large, we'll save ourselves
//the overhead of duplicating the array, then destroying the old
//one by returning a reference instead.
function &db_query_cached($sql,$name,$duration=900){
//this function takes advantage of the data caching library to make
//all of the other db_functions act just like MySQL queries but rely
//instead on disk cached data.
//if (getsetting("usedatacache", 0) == 1) debug("DataCache: $name");
//standard is 15 minutes, als hooks don't need to be cached *that* often, normally you invalidate the cache properly
global $dbinfo;
$data = datacache($name,$duration);
if (is_array($data)){
reset($data);
$dbinfo['affected_rows']=-1;
return $data;
}else{
$result = db_query($sql);
$data = array();
while ($row = db_fetch_assoc($result)) {
$data[] = $row;
}
updatedatacache($name,$data);
reset($data);
return $data;
}
}
if (file_exists("lib/dbremote.php")) {
require_once("lib/dbremote.php");
}
function db_error($link=false){
$fname = DBTYPE."_error";
if ($link!==false)
$r = @$fname($link);
else
$r = @$fname();
if ($r=="" && defined("DB_NODB") && !defined("DB_INSTALLER_STAGE4")) return "The database connection was never established";
return $r;
}
function db_fetch_assoc(&$result){
if (is_array($result)){
//cached data
if (list($key,$val)=each($result))
return $val;
else
return false;
}else{
$fname = DBTYPE."_fetch_assoc";
$r = $fname($result);
return $r;
}
}
function db_insert_id(){
if (defined("DB_NODB") && !defined("LINK")) return -1;
$fname = DBTYPE."_insert_id";
$r = $fname(LINK);
return $r;
}
function db_num_rows($result){
if (is_array($result)){
return count($result);
}else{
if (defined("DB_NODB") && !defined("LINK")) return 0;
$fname = DBTYPE."_num_rows";
$r = @$fname($result); //Whyfor turn off error reporting here?
return $r;
}
}
function db_affected_rows($link=false){
global $dbinfo;
if (isset($dbinfo['affected_rows'])) {
return $dbinfo['affected_rows'];
}
if (defined("DB_NODB") && !defined("LINK")) return 0;
$fname = DBTYPE."_affected_rows";
if ($link===false) {
$r = $fname(LINK);
}else{
$r = $fname($link);
}
return $r;
}
function db_pconnect($host,$user,$pass){
$fname = DBTYPE."_pconnect";
$r = $fname($host,$user,$pass);
return $r;
}
function db_connect($host,$user,$pass){
$fname = DBTYPE."_connect";
$r = $fname($host,$user,$pass);
return $r;
}
function db_get_server_version()
{
$fname = DBTYPE."_get_server_info";
if (defined("LINK")) $r = $fname(LINK);
else $r = $fname();
return $r;
}
function db_select_db($dbname){
$fname = DBTYPE."_select_db";
if(!defined("LINK")) $r = $fname($dbname);
else $r = $fname($dbname, LINK);
return $r;
}
function db_free_result($result){
if (is_array($result)){
//cached data
unset($result);
}else{
if (defined("DB_NODB") && !defined("LINK")) return false;
$fname = DBTYPE."_free_result";
$r = $fname($result);
return $r;
}
}
function db_table_exists($tablename){
if (defined("DB_NODB") && !defined("LINK")) return false;
$fname = DBTYPE."_query";
$exists = $fname("SELECT 1 FROM `$tablename` LIMIT 0");
if ($exists) return true;
return false;
}
function db_prefix($tablename, $force=false) {
global $DB_PREFIX;
if ($force === false) {
$special_prefixes = array();
// The following file should be used to override or modify the
// special_prefixes array to be correct for your site. Do NOT
// do this unles you know EXACTLY what this means to you, your
// game, your county, your state, your nation, your planet and
// your universe!
if (file_exists("prefixes.php")) require_once("prefixes.php");
$prefix = $DB_PREFIX;
if (isset($special_prefixes[$tablename])) {
$prefix = $special_prefixes[$tablename];
}
} else {
$prefix = $force;
}
return $prefix . $tablename;
}
?>