MYSQL的操作類(修改後的新版本) (轉)
class My
{
//操作類
//作者:熊毅
//版本:2.0(發行版)
//可以自由轉載,修改請通知我to:scxy78@yeah">scxy78@yeah.net
//轉載請保留以上宣告
//使用說明:
//該類完全按照ADO的習慣書寫的,用過的人都覺得ASP連線資料庫比好用(這是我的感覺),
//但PHP得一個一個地寫,挺累,該類做了完全的封裝
//建立類的例項時可以指定一個資料庫表和選擇的資料庫,如:new MySQLDB("table","database");
//查詢資料時Query後可以用GetValue得到相應的值,既可以是欄位名也可以是已0開始的序號
//插入新值,先用AddNew後使用SetValue相應的欄位名或序號和欄位值,在用Update新增
//編輯時用Edit指定編輯記錄的條件在使用SetValue,最後用Update新增
//在類使用過程中,sTName記錄上次使用的資料庫表名,當指定後可以直接使用,以後的操作預設在該表
//上進行操作,當然也可以每次指定特殊的表進行操作
//nErr指示是否操作出錯,sErr記錄最後一次出錯的錯誤程式碼,記錄了明確的有哪個引起的錯誤
//錯誤之處請指正
//歡迎來信與我交流:
//我的CSDN:號:scxy;呢稱:小熊,請多關照
//可以自由轉載,修改請通知我
//轉載請保留以上宣告
var $host="localhost"; //主機名
var $user="boot"; //使用者名稱
var $pass="oaserver"; //使用者密碼
var $linkid; //連線值
var $dbid; //資料庫選擇的結果值
var $sTName; //指定當前操作的資料庫表
var $sErr; //錯誤程式碼
var $nErr; //指示是否有錯誤存在,0無錯誤,1有錯誤
var $nResult; //查詢結果值
var $aFName; //儲存FieldsName的陣列
var $nRows; //查詢結果中的行數
var $nCols; //查詢結果中的列數
var $aNew; //新增在AddNew函式後的資料,以陣列形式儲存
var $NewEdit; //判斷當前是否在進行新增操作,0表示沒有,1表示在進行新增,2表示編輯
var $sEditCon; //指定編輯記錄的條件
var $nOffset; //記錄偏移量
var $EOF; //標記是否到記錄集尾
var $sSQL; //最後一條的SQL語句
//執行Update所要用到的全域性變數
var $sName; //欄位名
var $sValue; //欄位值AddNew時用
var $sEdit; //欄位值Edit時用
function Initialize()
{
$this->nErr=0;
$this->NewEdit=0;
$this->nResult=-1;
$this->nCols=0;
$this->nRows=0;
$this->nOffset=0;
$this->EOF=true;
$this->sName="";
$this->sValue="#@!";
$this->sEdit="#@!";
unset($this->aFName);
unset($this->aNew);
}
function MySqlDB($TableName="",$database="slt") //建構函式
{
$this->Initialize();
$this->sTName=$TableName;
$this->linkid=mysql_connect($host,$user,$password);
if(!$this->linkid)
{
$this->nErr=1;
$this->sErr="MySqlDB:資料庫連線出錯,請啟動服務!";
return;
}
$this->dbid=mysql__db($database);
if(!$this->dbid)
{
$this->nErr=1;
$this->sErr="MySqlDB:選擇的資料庫".$database."不存在!";
return;
}
}
function IsEmpty($Value)
{
if(is_string($Value)&&empty($Value))
return true;
return false;
}
function Destroy() //資料清除處理
{
mysql_query("commit");
mysql_close();
}
function PrintErr()
{
if($this->nErr==1)
{
echo($this->sErr."
");
}
else
{
echo("沒有錯誤
");
}
}
function Execute($SQL) //直接執行SQL語句
{
if(empty($SQL))
{
$this->nErr=1;
$this->sErr="Execute:執行語句不能為空!";
return false;
}
$this->sSQL=$SQL;
if(!mysql_query($SQL))
{
$this->nErr=1;
$this->sErr="Execute:SQL語句:".$SQL."
MySql錯誤:".mysql_error();
return false;
}
return true;
}
function Query($TableName="",$SQL="*",$Condition="",$Order="",$Sequenc="") //在資料庫裡執行查詢
{
$this->Initialize();
if(!empty($TableName))
$this->sTName=$TableName;
$strSQL="select ".$SQL." from ".$this->sTName;
if(!empty($Condition))
$strSQL=$strSQL." where ".$Condition;
if(!empty($Order))
$strSQL=$strSQL." order by ".$Order;
if(!empty($Sequenc))
$strSQL=$strSQL." ".$Sequenc;
$this->sSQL=$strSQL;
if(!$this->nResult=mysql_query($strSQL))
{
$this->nErr=1;
$this->sErr="Query:SQL語句:".$strSQL."
MySql錯誤:".mysql_error()."
";
return;
}
$this->nOffset=0;
$this->nRows=mysql_num_rows($this->nResult);
$this->nCols=mysql_num_fields($this->nResult);
if($this->nRows>0)
$this->EOF=false;
else
$this->EOF=true;
unset($this->aFName);
$this->aFName=array();
for($i=0;$inCols;$i++)
$this->aFName[$i]=strtolower(mysql_field_name($this->nResult,$i));
}
function MoveNext()
{
if($this->EOF)
{
$this->nErr=1;
$this->sErr="MoveNext:已經移到記錄集末尾!";
return;
}
$this->nOffset++;
if($this->nOffset>=$this->nRows)
$this->EOF=true;
}
function MoveTo($Offset)
{
if(empty($Offset))
{
$this->nErr=1;
$this->sErr="MoveTo:必須指定偏移量! ";
return;
}
if(!$this->nResult)
{
$this->nErr=1;
$this->sErr="MoveTo:請先執行查詢:Query";
return;
}
$this->nOffset=$Offset;
}
//得到指定行的指定列的值,返回字串
//如果不指定Offset將取得下一行的值
//如果不指定nFields將取得該行的值,並已陣列形式返回
function GetValue($nFields=-1,$Offset=-1)
{
if($this->nResult==-1)
{
$this->nErr=1;
$this->sErr="GetValue:請先執行Query()函式!";
return;
}
if($Offset>-1)
{
$this->nOffset=$Offset;
if($this->nOffset>=$this->nRows)
{
$this->nErr=1;
$this->sErr="GetValue:所要求的偏移量太大,無法達到!";
return;
}
}
if(!@mysql_data_seek($this->nResult,$this->nOffset))
{
$this->nErr=1;
$this->sErr="GetValue:請求不存在的記錄!";
return;
}
$aResult=mysql_fetch_row($this->nResult);
if(is_int($nFields)&&$nFields>-1)
{
if($nFileds>$this->nCols)
{
$this->nErr=1;
$this->sErr="GetValue:所請求的列值大於實際的列值!";
return;
}
return $aResult[$nFields];
}
if(is_string($nFields))
{
$nFields=strtolower($nFields);
for($i=0;$inCols;$i++)
{
if($this->aFName[$i]==$nFields)
break;
}
if($i==$this->nCols)
{
$this->nErr=1;
$this->sErr="GetValue:所請求的列不存在,請仔細檢查!";
return;
}
return $aResult[$i];
}
return $aResult;
}
function AddNew($TableName="") //標誌開始新增資料
{
$this->Initialize();
if(!empty($TableName))
$this->sTName=$TableName;
if($this->NewEdit>0)
{
$this->nErr=1;
$this->sErr="AddNew:你正在對資料庫進行新增或操作!";
return;
}
if(empty($this->sTName))
{
$this->nErr=1;
$this->sErr="AddNew:想要新增的資料庫表為空,可以在構造時指定,也可在AddNew()時指定!";
return;
}
unset($this->aNew);
$this->aNew=array();
$this->NewEdit=1;
$strSQL="select * from ".$this->sTName;
$this->sSQL=$strSQL;
if(!$this->nResult=mysql_query($strSQL))
{
$this->nErr=1;
$this->sErr="AddNew:SQL語句:".strSQL."
MySql錯誤:".mysql_error();
return;
}
$this->nCols=mysql_num_fields($this->nResult);
unset($this->aFName);
$this->aFName=array();
for($i=0;$inCols;$i++)
$this->aFName[$i]=strtolower(mysql_field_name($this->nResult,$i));
}
function Edit($Condition="",$TableName="") //對指定資料庫表進行編輯
{
$this->Initialize();
if(!empty($TableName))
$this->sTName=$TableName;
$this->sEditCon=$Condition;
if(empty($this->sTName))
{
$this->nErr=1;
$this->sErr="Edit:在編輯前請先指定資料庫表!";
return;
}
unset($this->aNew);
$this->aNew=array();
$this->NewEdit=2;
$strSQL="select * from ".$this->sTName;
$this->sSQL=$strSQL;
if(!$this->nResult=mysql_query($strSQL))
{
$this->nErr=1;
$this->sErr="Edit:SQL語句:".strSQL."
MySql錯誤:".mysql_error();
return;
}
$this->nCols=mysql_num_fields($this->nResult);
unset($this->aFName);
$this->aFName=array();
for($i=0;$inCols;$i++)
$this->aFName[$i]=strtolower(mysql_field_name($this->nResult,$i));
}
function SetValue($Index,$Value) //指定資料,跟在AddNew後執行;
{
if($this->NewEdit==0)
{
$this->nErr=1;
$this->sErr="SetValue:請先執行AddNew()或者Edit()!";
return;
}
if(is_int($Index))
{
if($Index<0||$Index>$this->nCols)
{
$this->nErr=1;
$this->sErr="SetValue:插入不存在的列值!";
return;
}
$this->aNew[$Index]=$Value;
$tmpIn=$Index;
}
elseif(is_string($Index))
{
$Index=strtolower($Index);
for($i=0;$inCols;$i++)
{
if($this->aFName[$i]==$Index)
break;
}
if($i==$this->nCols)
{
$this->nErr=1;
$this->sErr="SetValue:插入不存在的列值!";
return;
}
$this->aNew[$i]=$Value;
$tmpIn=$i;
}
if(!empty($this->sName))
$this->sName.=",";
$this->sName.=$this->aFName[$tmpIn];
//根據當前欄位的型別生成相應的新值
if($this->sValue!="#@!")
$this->sValue.=",";
else
$this->sValue="";
$ftype=@mysql_field_type($this->nResult,$i);
//echo($ftype.",".$this->aNew[$i].",".$i.":".$sValue."
");
switch($ftype)
{
case "string":
case "date":
case "datetime":
$this->sValue.=""".$this->aNew[$tmpIn].""";
$this->sEdit=""".$this->aNew[$tmpIn].""";
break;
case "int":
case "unknown":
$this->sValue.=$this->aNew[$tmpIn];
$this->sEdit=$this->aNew[$tmpIn];
break;
default:
$this->nErr=1;
$this->sErr="Update:欄位名為".$this->aFName[$tmpIn]."的".$ftype."型別目前版本不支援,請用別的方法新增資料!";
return;
}
if($this->NewEdit==2)
$this->sName.="=".$this->sEdit;
}
function Update() //新值到資料庫
{
$strSQL="";
if($this->NewEdit==0)
{
$this->nErr=1;
$this->sErr="Update:請先執行AddNew()或者Edit(),再用SetValue()新增值!";
return;
}
if(empty($this->sValue))
{
$this->nErr=1;
$this->sErr="Update:在資料為空的情況下,不能新增或修改資料!";
return;
}
switch($this->NewEdit)
{
case 1: //新增
$strSQL="insert into ";
$strSQL.=$this->sTName;
$strSQL.=" (".$this->sName.") ";
$strSQL.="values (".$this->sValue.")";
break;
case 2: //修改
$strSQL="update ";
$strSQL.=$this->sTName;
$strSQL.=" set ";
$strSQL.=$this->sName;
if(!empty($this->sEditCon))
$strSQL.=" where ".$this->sEditCon;
break;
default:
$this->nErr=1;
$this->sErr="Update:Update()生成SQL語句出錯,請檢查!";
return;
}
$this->sSQL=$strSQL;
if(!$this->nResult=mysql_query($strSQL))
{
$this->nErr=1;
$this->sErr="Update:SQL語句:".$strSQL."
MySql錯誤:".mysql_error();
return;
}
//echo($this->sSQL."
");
//作清理工作
$this->NewEdit=0;
unset($this->aNew);
mysql_query("commit");
}
}
?>
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10748419/viewspace-1007855/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- mysql類似merge的操作MySql
- mysql密碼忘記的修改(轉)MySql密碼
- 一次RAC下的的SGA修改操作(轉)
- Mysql操作方法類MySql
- MySql 資料操作類MySql
- php簡單操作mysql資料庫的類PHPMySql資料庫
- Java 中賦值類時候修改後原類中的值改變Java賦值
- PHP封裝的一個單例模式Mysql操作類PHP封裝單例模式MySql
- JQ操作類與JS操作類的區別JS
- 基於MySQL Adapter完成資料的增刪和修改操作MySqlAPT
- MySQL 8.0之後版本密碼修改MySql密碼
- ubuntu安裝mysql後修改密碼UbuntuMySql密碼
- MySQL修改表的列名MySql
- 修改MySQL的時區MySql
- 類操作是什麼意思?jQuery的類操作教程jQuery
- JavaScript強制型別轉換的背後操作JavaScript型別
- mysql使用者建立、修改、刪除及授權操作的總結MySql
- JBOSS 321 無法檢測到修改後的類,應用當機。
- MySQL的基本操作MySql
- DriveInfo類的基本操作
- FileInfo類的基本操作
- File類的基本操作
- 類操作是什麼意思?jQuery的類操作教程分享jQuery
- 修改MySQL中的資料MySql
- 修改mysql的root密碼MySql密碼
- docker下mysql連線數修改後不生效問題的解決DockerMySql
- MySQL修改密碼方法總結 (轉)MySql密碼
- wampSever的mysql操作MySql
- MySQL 常用的UPDATE操作MySql
- mysql下的flush操作MySql
- 自寫的使用PDO對mysql資料庫的增刪改查操作類MySql資料庫
- 瀏覽器新版本上線背後的故事瀏覽器
- 對類物件的方法操作物件
- 表空間的建立修改等操作
- iOS11 更新後的修改iOS
- 修改vue打包後的結構Vue
- 一次RAC下的的SGA修改操作
- mysql常識和基本操作(轉)MySql