?? pub_db_mysql.php
字號:
<?php
//調用這個類前,請先設定這些外部變量
//$cfg_dbhost="";
//$cfg_dbname="";
//$cfg_dbuser="";
//$cfg_dbpwd="";
//前綴名稱
//$cfg_dbprefix="";
$dsql = new DedeSql(false);
class DedeSql
{
var $linkID;
var $dbHost;
var $dbUser;
var $dbPwd;
var $dbName;
var $dbPrefix;
var $result;
var $queryString;
var $parameters;
var $isClose;
//
//用外部定義的變量初始類,并連接數據庫
//
function __construct($pconnect=false,$nconnect=true)
{
$this->isClose = false;
if($nconnect) $this->Init($pconnect);
}
function DedeSql($pconnect=false,$nconnect=true)
{
$this->__construct($pconnect,$nconnect);
}
function Init($pconnect=false)
{
$this->linkID = 0;
$this->queryString = "";
$this->parameters = Array();
$this->dbHost = $GLOBALS["cfg_dbhost"];
$this->dbUser = $GLOBALS["cfg_dbuser"];
$this->dbPwd = $GLOBALS["cfg_dbpwd"];
$this->dbName = $GLOBALS["cfg_dbname"];
$this->dbPrefix = $GLOBALS["cfg_dbprefix"];
$this->result["me"] = 0;
$this->Open($pconnect);
}
//
//用指定參數初始數據庫信息
//
function SetSource($host,$username,$pwd,$dbname,$dbprefix="dede_")
{
$this->dbHost = $host;
$this->dbUser = $username;
$this->dbPwd = $pwd;
$this->dbName = $dbname;
$this->dbPrefix = $dbprefix;
$this->result["me"] = 0;
}
function SelectDB($dbname)
{
mysql_select_db($dbname);
}
//
//設置SQL里的參數
//
function SetParameter($key,$value){
$this->parameters[$key]=$value;
}
//
//連接數據庫
//
function Open($pconnect=false)
{
global $dsql;
//連接數據庫
if($dsql && !$dsql->isClose) $this->linkID = $dsql->linkID;
else
{
if(!$pconnect){ $this->linkID = @mysql_connect($this->dbHost,$this->dbUser,$this->dbPwd); }
else{ $this->linkID = @mysql_pconnect($this->dbHost,$this->dbUser,$this->dbPwd); }
//復制一個對象副本
CopySQLPoint($this);
}
//處理錯誤,成功連接則選擇數據庫
if(!$this->linkID){
//echo $this->GetError();
$this->DisplayError("ViooMA錯誤警告:<font color='red'>連接數據庫失敗,可能數據庫密碼不對或數據庫服務器出錯,如未安裝本系統,請先運行安裝程序,如果已經安裝,請檢查MySQL服務或修改include/config_base.php的配置!</font>");
exit();
}
@mysql_select_db($this->dbName);
$mysqlver = explode('.',$this->GetVersion());
$mysqlver = $mysqlver[0].'.'.$mysqlver[1];
if($mysqlver>4.0) @mysql_query("SET NAMES '".$GLOBALS['cfg_db_language']."';",$this->linkID);
if($mysqlver>5.0) @mysql_query("SET sql_mode='' ;", $this->linkID);
return true;
}
//
//獲得錯誤描述
//
function GetError()
{
$str = ereg_replace("'|\"","`",mysql_error());
return $str;
}
//
//關閉數據庫
//
function Close()
{
@mysql_close($this->linkID);
$this->isClose = true;
if(is_object($GLOBALS['dsql'])){ $GLOBALS['dsql']->isClose = true; }
$this->FreeResultAll();
}
//-----------------
//定期清理死連接
//-----------------
function ClearErrLink()
{
global $cfg_dbkill_time;
if(empty($cfg_dbkill_time)) $cfg_dbkill_time = 30;
@$result=mysql_query("SHOW PROCESSLIST",$this->linkID);
if($result)
{
while($proc=mysql_fetch_assoc($result))
{
if($proc['Command']=='Sleep'
&& $proc['Time']>$cfg_dbkill_time) @mysql_query("KILL ".$proc["Id"],$this->linkID);
}
}
}
//
//關閉指定的數據庫連接
//
function CloseLink($dblink)
{
@mysql_close($dblink);
}
//
//執行一個不返回結果的SQL語句,如update,delete,insert等
//
function ExecuteNoneQuery($sql="")
{
global $dsql;
if($dsql->isClose){
$this->Open(false);
$dsql->isClose = false;
}
if($sql!="") $this->SetQuery($sql);
if(is_array($this->parameters)){
foreach($this->parameters as $key=>$value){
$this->queryString = str_replace("@".$key,"'$value'",$this->queryString);
}
}
return mysql_query($this->queryString,$this->linkID);
}
//
//執行一個返回影響記錄條數的SQL語句,如update,delete,insert等
//
function ExecuteNoneQuery2($sql="")
{
global $dsql;
if($dsql->isClose){
$this->Open(false);
$dsql->isClose = false;
}
if($sql!="") $this->SetQuery($sql);
if(is_array($this->parameters)){
foreach($this->parameters as $key=>$value){
$this->queryString = str_replace("@".$key,"'$value'",$this->queryString);
}
}
mysql_query($this->queryString,$this->linkID);
return mysql_affected_rows($this->linkID);
}
function ExecNoneQuery($sql="")
{
return $this->ExecuteNoneQuery($sql);
}
//
//執行一個帶返回結果的SQL語句,如SELECT,SHOW等
//
function Execute($id="me",$sql="")
{
global $dsql;
if($dsql->isClose){
$this->Open(false);
$dsql->isClose = false;
}
if($sql!="") $this->SetQuery($sql);
$this->result[$id] = @mysql_query($this->queryString,$this->linkID);
if(!$this->result[$id]){
$this->DisplayError(mysql_error()." - Execute Query False! <font color='red'>".$this->queryString."</font>");
}
}
function Query($id="me",$sql="")
{
$this->Execute($id,$sql);
}
//
//執行一個SQL語句,返回前一條記錄或僅返回一條記錄
//
function GetOne($sql="",$acctype=MYSQL_BOTH)
{
global $dsql;
if($dsql->isClose){
$this->Open(false);
$dsql->isClose = false;
}
if($sql!=""){
if(!eregi("limit",$sql)) $this->SetQuery(eregi_replace("[,;]$","",trim($sql))." limit 0,1;");
else $this->SetQuery($sql);
}
$this->Execute("one");
$arr = $this->GetArray("one",$acctype);
if(!is_array($arr)) return("");
else { @mysql_free_result($this->result["one"]); return($arr);}
}
//
//執行一個不與任何表名有關的SQL語句,Create等
//
function ExecuteSafeQuery($sql,$id="me")
{
global $dsql;
if($dsql->isClose){
$this->Open(false);
$dsql->isClose = false;
}
$this->result[$id] = @mysql_query($sql,$this->linkID);
}
//
//返回當前的一條記錄并把游標移向下一記錄
// MYSQL_ASSOC、MYSQL_NUM、MYSQL_BOTH
//
function GetArray($id="me",$acctype=MYSQL_BOTH)
{
if($this->result[$id]==0) return false;
else return mysql_fetch_array($this->result[$id],$acctype);
}
function GetObject($id="me")
{
if($this->result[$id]==0) return false;
else return mysql_fetch_object($this->result[$id]);
}
//
//檢測是否存在某數據表
//
function IsTable($tbname)
{
$this->result[0] = mysql_list_tables($this->dbName,$this->linkID);
while ($row = mysql_fetch_array($this->result[0]))
{
if(strtolower($row[0])==strtolower($tbname))
{
mysql_freeresult($this->result[0]);
return true;
}
}
mysql_freeresult($this->result[0]);
return false;
}
//
//獲得MySql的版本號
//
function GetVersion()
{
global $dsql;
if($dsql->isClose){
$this->Open(false);
$dsql->isClose = false;
}
$rs = mysql_query("SELECT VERSION();",$this->linkID);
$row = mysql_fetch_array($rs);
$mysql_version = $row[0];
mysql_free_result($rs);
return $mysql_version;
}
//
//獲取特定表的信息
//
function GetTableFields($tbname,$id="me")
{
$this->result[$id] = mysql_list_fields($this->dbName,$tbname,$this->linkID);
}
//
//獲取字段詳細信息
//
function GetFieldObject($id="me")
{
return mysql_fetch_field($this->result[$id]);
}
//
//獲得查詢的總記錄數
//
function GetTotalRow($id="me")
{
if($this->result[$id]==0) return -1;
else return mysql_num_rows($this->result[$id]);
}
//
//獲取上一步INSERT操作產生的ID
//
function GetLastID()
{
//如果 AUTO_INCREMENT 的列的類型是 BIGINT,則 mysql_insert_id() 返回的值將不正確。
//可以在 SQL 查詢中用 MySQL 內部的 SQL 函數 LAST_INSERT_ID() 來替代。
//$rs = mysql_query("Select LAST_INSERT_ID() as lid",$this->linkID);
//$row = mysql_fetch_array($rs);
//return $row["lid"];
return mysql_insert_id($this->linkID);
}
//
//釋放記錄集占用的資源
//
function FreeResult($id="me")
{
@mysql_free_result($this->result[$id]);
}
function FreeResultAll()
{
if(!is_array($this->result)) return "";
foreach($this->result as $kk => $vv){
if($vv) @mysql_free_result($vv);
}
}
//
//設置SQL語句,會自動把SQL語句里的#@__替換為$this->dbPrefix(在配置文件中為$cfg_dbprefix)
//
function SetQuery($sql)
{
$prefix="#@__";
$sql = str_replace($prefix,$this->dbPrefix,$sql);
$this->queryString = $sql;
}
function SetSql($sql)
{
$this->SetQuery($sql);
}
//
//顯示數據鏈接錯誤信息
//
function DisplayError($msg)
{
echo "<html>\r\n";
echo "<head>\r\n";
echo "<meta http-equiv='Content-Type' content='text/html; charset=gb2312'>\r\n";
echo "<title>Viooma進銷存 Error Track</title>\r\n";
echo "</head>\r\n";
echo "<body>\r\n<p style='line-helght:150%;font-size:10pt'>\r\n";
echo $msg;
echo "<br/><br/>";
echo "</p>\r\n</body>\r\n";
echo "</html>";
//$this->Close();
//exit();
}
}
//復制一個對象副本
function CopySQLPoint(&$ndsql)
{
$GLOBALS['dsql'] = $ndsql;
}
?>
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -