<?php
require_once ICE_DIR . "/Ice/Database/adodb_lite/adodb.inc.php";
// Driver
class Ice_Database_Driver
{
/**
* æ°æ®åºè¿æ¥ä¿¡æ¯
*
* @var string
*/
var $dsn = "mysql://hide@address.com/test?false#Pear";
/**
* æ°æ®åºè¿æ¥å¥æ
*
* @var resource
*/
var $dbo = null;
/**
* æ°æ®è¡¨åç¼
*
* @var string
*/
var $dbPrefix = "";
/**
* SQLæ¥è¯¢å¥æ
*
* @var resource
*/
var $queryId = null;
/**
* SQLæ¥è¯¢æ¬¡æ°
*
* @var int
*/
var $queryNum = 0;
/**
* åºéä¹åæ¯å¦åæ¢è¿è¡ç¨åº
*
* @var boolean
*/
var $isHalt = true;
/**
* é误信æ¯
*
* @var string
*/
var $error = null;
/**
* æé 彿°
*
* @param string $dsn
* @return void
*/
function Ice_Database_Driver()
{
}
function getInstance()
{
static $instance;
if (!empty($instance))
{
$instance = new Ice_Database_Driver();
}
return $instance;
}
/**
* æ°æ®åºè¿æ¥
*
* @param string $dsn
* @return boolean
*/
function connect($dsn = null, $dbPrefix = "")
{
if ($this->dbo) return true;
if (!$dsn) $dsn = $this->dsn;
$this->dbPrefix = $dbPrefix;
$this->dbo = ADONewConnection($dsn);
if(!$this->dbo)
{
$this->halt("Can't link to database!");
}
$this->_execute("SET CHARACTER_SET_CLIENT = utf8, " .
"CHARACTER_SET_CONNECTION = utf8, " .
"CHARACTER_SET_DATABASE = utf8, " .
"CHARACTER_SET_RESULTS = utf8, " .
"CHARACTER_SET_SERVER = utf8, " .
"COLLATION_CONNECTION = utf8_general_ci, " .
"COLLATION_DATABASE = utf8_general_ci, " .
"COLLATION_SERVER = utf8_general_ci ");
unset($user, $pass, $host, $port, $pconnect, $dbName);
return true;
}
/**
* SQLæ¥è¯¢
*
* @param string $sql
* @return resource
*/
function query($sql)
{
$this->dbPrefix == 'bz_' or $sql = str_replace("bz_", $this->dbPrefix, $sql);
return $this->_execute($sql);
}
/**
* æ§è¡ä¸ä¸ªæ¥è¯¢ï¼è¿åæ¥è¯¢ç»æè®°å½é
*
* @param string $sql
* @return array
*/
function getAll($sql)
{
$this->dbPrefix == 'bz_' or $sql = str_replace("bz_", $this->dbPrefix, $sql);
return $this->dbo->GetAll($sql);
}
/**
* æ§è¡æ¥è¯¢ï¼è¿åç¬¬ä¸æ¡è®°å½
*
* @param string $sql
* @return mixed
*/
function getOne($sql)
{
$this->dbPrefix == 'bz_' or $sql = str_replace("bz_", $this->dbPrefix, $sql);
$list = $this->dbo->SelectLimit($sql, 1);
return $list ? $list->GetAll() : false;
}
/**
* execute sql
* @param $strQuery
* @return mix
*/
function _execute($sql) {
if (null === $this->dbo->Execute($sql)) {
$this->halt("Sorry, can't execute your SQL", $sql);
return false;
}
return true;
}
/**
* æ¾ç¤ºé误信æ¯
*
* @return boolean
*/
function halt($msg, $sql = "")
{
$err = '<pre style="font: 12px vernada, arial;">';
$err .= "<b>Error Infomation: </b>".$msg."\n";
//$err .= "<b>MySQL Errno: </b> ".$this->errno()."<br />";
//$err .= "<b>MySQL Error: </b> ".$this->error();
if( $sql ) $err .= "\n<b>SQL:</b> ".$sql;
$err .= '</pre>';
if ($this->isHalt)
{
echo nl2br($err);die;
}
else
{
$this->error = $err;
}
return true;
}
}