197 lines
5.1 KiB
PHP
Executable File
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;
|
|
}
|
|
|
|
?>
|