OpenSim.VisitorBoard/classes/Framework.MySql.Class.php

120 lines
3.4 KiB
PHP

<?php
/***********************************************************************
* Script (c) Kubwa (https://kubwa.de)
*
* This script was release under BSD license.
* You are free to use, share or change this code as you wish. This
* header must be kept intact.
***********************************************************************/
class MySql
{
private $Connection;
public function __construct($User, $Pass, $Database = null, $Server = "127.0.0.1")
{
$this->Connection = mysqli_connect($Server, $User, $Pass);
if ($Database != null)
{mysqli_select_db($this->Connection, $Database);}
$this->query("CREATE TABLE IF NOT EXISTS _datastore (id VARCHAR(64) PRIMARY KEY, data TEXT)");
}
public function id($Len = 36)
{
$Chars = str_shuffle("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789");
$Res = "";
for ($i = 0; $i < $Len; ++$i) {$Res = $Res.substr($Chars, rand(0, strlen($Chars) - 1), 1);}
return $Res;
}
public function close()
{mysqli_close($this->Connection);}
public function ping()
{return mysqli_ping($this->Connection);}
public function query($Query, $Values = array())
{
$Whitespaces = array(" ", "\t", "\n", "\r", "\0", "\x0B");
$ReplaceData = array(array(), array());
$StartOffset = 1;
if (stripos($Query, "{0}") !== false) {$StartOffset = 0;}
foreach($Values as $Key => $Value)
{
if (is_numeric($Key)) {$Key = $Key + $StartOffset;}
$InQueryPos = stripos($Query, "{".$Key."}");
if ($InQueryPos !== false)
{
$LeadingChr = "";
for ($u = $InQueryPos - 1; $u > -1; $u = $u - 1)
{
if (!in_array(substr($Query, $u, 1), $Whitespaces))
{
if (substr($Query, $u, 1) != "'") {$LeadingChr = "'";}
break;
}
}
$FollowingChr = "";
for ($u = $InQueryPos + strlen("{".$Key."}"); $u < strlen($Query); $u = $u + 1)
{
if (!in_array(substr($Query, $u, 1), $Whitespaces))
{
if (substr($Query, $u, 1) != "'") {$FollowingChr = "'";}
break;
}
}
if ($InQueryPos + strlen("{".$Key."}") >= strlen($Query)) {$FollowingChr = "'";}
$ReplaceData[0][] = "{".$Key."}";
$ReplaceData[1][] = $LeadingChr.mysqli_real_escape_string($this->Connection, $Value).$FollowingChr;
}
}
$Query = str_ireplace($ReplaceData[0], $ReplaceData[1], $Query);
$MysqlRes = new MySqlResult(mysqli_query($this->Connection, $Query), $Query);
return $MysqlRes;
}
public function setting($Name, $Value = null)
{
$Name = strtoupper($Name);
if (!isset($Value))
{
$Res = $this->query("SELECT * FROM _datastore WHERE id = '{0}' LIMIT 1", array($Name));
if ($Res->error() == "")
{
$DataRes = $Res->fetch();
if (isset($DataRes)) {return $DataRes[data];}
return false;
}
return null;
}
else
{$this->query("REPLACE INTO _datastore (id, data)VALUES('{0}', '{1}')", array($Name, $Value));}
}
}
class MySqlResult
{
private $MySqlRes;
private $Error;
private $QueryString;
public function __construct($QueryRes, $QueryStr)
{
$this->MySqlRes = $QueryRes;
$this->Error = mysqli_error($this->Connection);
$this->QueryString = $QueryStr;
}
public function fetch()
{return mysqli_fetch_array($this->MySqlRes);}
public function error()
{return $this->Error;}
public function querystring()
{return $this->QueryString;}
public function numrows()
{return mysqli_num_rows($this->MySqlRes);}
}
?>