不知道和主题是否相符,讲究看把, 一直没有为村里做过什么贡献,以下是我积累经过很多次修改所积累下来的
主要为开发能节省 70%以上的时间
<?php
class MySqlDatabase {
private $conn;
private $arrProcedureParams;
///建立数据库连接
function connect($selectdb = true) {
// mysql 5.2 mysql_pconect(mysql_server, mysql_user, mysql_pwd, 1, 131072);
if( DB_PCONNECT )
$this->conn = @mysql_pconnect(MYSQL_SERVER,MYSQL_USER,MYSQL_PWD);
else
$this->conn = @mysql_connect(MYSQL_SERVER, MYSQL_USER, MYSQL_PWD);
if(!$this->conn) {
$this->Loger->addQuery('', $this->errno(), $this->error());
return false;
}
$this->updateQuery('SET NAMES UTF8');
if($selectdb) {
if(!mysql_select_db(MYSQL_DATANAME)) {
$this->Loger->addQuery('', $this->errno(), $this->error());
return false;
}
}
return true;
}
function errno() {
return @mysql_errno();
}
function error() {
return @mysql_error();
}
function QueryPageL(&$totalCount, $tabName, $PageIndex, $PageSize = 20, $StrWhere, $OrderField, $OrderFieldDesc, $StrField = "*") {
if(empty($tabName))
return false;
$sql = "SELECT COUNT(1) FROM $tabName";
$sWhere = " WHERE 1=1 and";
if (empty($StrWhere))
$sWhere = "";
else
$sWhere .= $StrWhere;
$sql .= $sWhere;
$totalCount = $this->QueryPageTotalCount($sql);
if(!is_int($totalCount)) return false;
if($totalCount <= 0) return false;
$sOrder = " ORDER BY ";
if(empty($OrderField))
$sOrder = "";
else {
$sOrder .= $OrderField;
$sOrder .= $OrderFieldDesc;
}
$sql = "SELECT $StrField FROM $tabName $sWhere $sOrder";
return $this->QueryPage($sql, $PageSize, $PageIndex);
}
function QueryPage($sql, $PageIndex = 0, $PageSize = 20) {
if(empty($sql))
return false;
$sql = $sql. ' LIMIT '. $PageIndex*$PageSize. ', '. $PageSize;
$result = @mysql_query($sql, $this->conn);
if(!$result) {
$this->Loger->addQuery($sql, $this->errno(), $this->error());
return false;
} else {
$this->Loger->addQuery($sql);
return $result;
}
}
function getObjectQueryPage($sql, $object, $PageIndex = 0, $PageSize = 20) {
$result = $this->QueryPage($sql, $PageIndex, $PageSize);
if(!$result)
return false;
$objarr = array();
while($myarr = $this->fetchArray($result))
$objarr[] = $object->IPoplateIDataReader($myarr);
return $objarr;
}
function getObjectQuery($sql, $object, $cout = -1) {
$result = $this->Query($sql);
if(!$result)
return false;
if($cout != -1)
return $object->IPoplateIDataReader($this->fetchArray($result));
$arrobj = array();
while($myarr = $this->fetchArray($result))
$arrobj[] = $object->IPoplateIDataReader($myarr);
return $arrobj;
}
function QueryProcedure($m_ProcedureName) {
$sqlCall = "call $m_ProcedureName(";
$i = 0;
foreach ($this->arrProcedureParams as $_value) {
if($_value["SqlType"] == "String")
$result = $this->Query("set @".$_value['Name']."='".$_value['Value']."'");
else
$result = $this->Query("set @".$_value['Name']."=".$_value['Value']);
$sqlCall .= "@".$_value['Name'];
if( (count($this->arrProcedureParams)-1) != $i )
$sqlCall .= ",";
$i = $i +1 ;
}
$sqlCall .= ")";
$objresult = $this->Query($sqlCall);
foreach ($this->arrProcedureParams as $key => $_value) {
if($_value["InputType"] != "out") continue;
$result = $this->Query("select @".$_value["Name"]);
$result = @mysql_fetch_array($result);
$this->arrProcedureParams[$key]["Value"] = $result[0];
}
return $objresult;
}
function getProcedureParams($cmdName) {
return $this->arrProcedureParams[$cmdName]["Value"];
}
function AddProcedureParams($cmdName, $cmdValue, $inputType = "in", $SqlType) {
$this->arrProcedureParams[$cmdName] = array('Name' => $cmdName,
'Value' =>$cmdValue,
'InputType' => $inputType,
'SqlType' => $SqlType);
}
function clearParams() {
$this->arrProcedureParams = array();
}
/**
* @return int
* @example SELECT COUNT(1) FROM fav_user
* */
function QueryPageTotalCount($sql) {
if(empty($sql))
return false;
$result = @mysql_query($sql, $this->conn);
if(!$result) {
$this->Loger->addQuery($sql, $this->errno(), $this->error());
return false;
} else {
$this->Loger->addQuery($sql);
if($this->getRowsNum($result) == 0) {
unset($result);
return false;
}
$arr = $this->fetchArray($result);
if(empty($arr['COUNT(1)'])) {
unset($result);
return false;
}
if(is_int($arr['COUNT(1)'])) {
unset($result);
return false;
}
$rev = intval($arr['COUNT(1)']);
unset($result);
return $rev;
}
}
///执行一个Sql语句
function Query($sql) {
if(empty($sql))
return false;
$result = @mysql_query($sql, $this->conn);
if(!$result) {
return false;
} else {
if(!$this->getRowsNum($result))
return false;
return $result;
}
}
/**
* 执行一个 insert update delete 并返回 $sql 所影响的行数
*
* @param string 需要执行的 Sql 语句
* @return 返回 $sql 语句所执行后,所影响的行数
*/
function updateQuery($sql) {
if(empty($sql))
return false;
$result = @mysql_query($sql, $this->conn);
$count = $this->getAffectedRows($this->conn);
unset($result);
return $count;
}
function fetchRow($result) {
return @mysql_fetch_row($result);
}
function fetchArray($result) {
return @mysql_fetch_assoc($result);
}
function LastInsertId() {
return @mysql_insert_id();
}
FUNCTION fetchArrayL($result) {
return @mysql_fetch_array($result, MYSQL_ASSOC);
}
function fetchFieldType($result) {
return @mysql_field_type($result);
}
function getRowsNum($result) {
return @mysql_num_rows($result);
}
function getAffectedRows($result) {
return @mysql_affected_rows($result);
}
function Close() {
@mysql_close($this->conn);
}
function __destruct() {
$this->Close();
}
}
abstract class Database {
protected $db;
function __construct($connected = true) {
if($connected)
$this->db = DatabaseInstance();
}
abstract function IPoplateIDataReader($result);
}
abstract class PropDatabase {
protected $db;
protected $_attribute;
protected $_attr = null;
private $_update_attr = array();
function __construct($connected = true) {
if($connected)
$this->db = DatabaseInstance();
}
/**
* Enter description here...
*
* @param unknown_type $dname
*/
public function AddUpdataIdent($dname) {
$this->_update_attr[] = $dname;
}
public function IPoplateIDataReader($result) {
$class = get_class($this);
$b = new $class(false);
foreach ($result as $key => $value) {
$b->$key = $value;
}
return $b;
}
function __set($name, $value) {
if(property_exists($this, $name))
$this->$name = $value;
else
$this->_attribute[$name] = $value;
}
function __get($name) {
if( property_exists($this, $name) )
return $this->$name;
if( @array_key_exists($name, $this->_attribute) )
return $this->_attribute[$name];
else
trigger_error("class ".get_class($this)." is not property $name");
}
public function __insert($tablename = "") {
$tmp = null;
if(empty($tablename))
$tablename = get_class($this);
$strsql = "INSERT INTO $tablename(%s)VALUES(%s)";
$_field = $_value = "";
if(is_array($this->_attr)) {
for ($i=0;$i<count($this->_attr);$i++) {
$_field .= $this->_attr[$i];
if($this->_attribute != null) {
if( array_key_exists($this->_attr[$i], $this->_attribute) )
$_value .= $this->getValue($this->_attribute[$this->_attr[$i]]);
else {
$_pre_val = $this->_attr[$i];
$_value .= $this->getValue($this->$_pre_val);
}
} else {
$_pre_val = $this->_attr[$i];
$_value .= $this->getValue($this->$_pre_val);
}
if($i != (count($this->_attr) - 1)) {
$_field .= ',';
$_value .= ',';
}
}
} else {
$_field = $_value = "";
$i=0;
foreach ($this->_attribute as $Key => $_val) {
$_field .= $Key;
$_value .= $this->getValue($_val);
if($i != (count($this->_attribute) - 1)) {
$_field .= ',';
$_value .= ',';
}
$i++;
}
}
$strsql = sprintf($strsql, $_field, $_value);
//echo $strsql;
//var_dump($strsql);
$this->db->updateQuery($strsql);
return $this->db->LastInsertId();
}
private function getValue($_tmp) {
if(is_bool($_tmp)) {
$_value = $_tmp ? 1 : 0;
}elseif(is_string($_tmp)) {
$_value = "'$_tmp'";
}elseif (is_array($_tmp)) {
$_value = "'".serialize($_tmp)."'";
}elseif (is_object($_tmp)) {
$_value = "'".serialize($_tmp)."'";
}else {
$_value = $_tmp;
}
return $_value;
}
/*function __call($name, $arguments) {
$u = get_class($this);
trigger_error("class $u is not method $name");
}*/
}
?>
用法:
以用户表为例子
表明: User
uid int auto
UserName char(50)
Pwd char(128)
userinfo char(255)
regtime int(10)
<?php
class user extends PropDatabase {
//添加一个用户
public function AddUser() {
//表明
return $this->__insert("user");
}
/*返回最新注册的100个用户*/
public function getUserBynewreg($num) {
$sql = "SELECT * FROM user order by regtime DESC";
return $this->db->getObjectQuery($sql, $this, $num);
}
/*
返回一个附带分页的用户列表
*/
public function getUserByList($PageIndex, $PageSize,& $total) {
$sql = "SELECT COUNT(1) FROM user";
$total = $this->db->QueryPageTotalCount($sql);
if(!$total) return false;
if($total < 0 ) return false;
$sql = "SELECT * FROM user ";
return $this->db->getObjectQueryPage($sql, $this, $PageIndex, $PageSize);
}
public function getUserById($uid) {
$sql = "SELECT * FROM user WHERE uid = $uid";
return $this->db->getObjectQuery($sql, $this, 1);
}
/* 当需要处理没条语句的时候,会自动调用该方法*/
public function IPoplateIDataReader($result) {
$obj = parent::IPoplateIDataReader($result);
$obj->userinfo = unserialize($obj->userinfo);
return $obj;
}
}
?>
使用user类
<?php
$user = new user();
$user->username = "fdwl";
$user->pwd = @md5("123456");
$user->userinfo = serialize(array("北京", "河南", "上街", "济南"));
$user->regtime = time();
$result = $user->AddUser();
if($result === false)
die("注册失败");
echo "新注册的用户成功";
$userlist = $user->getUserById(1);
if(!$userlist) die("返回列表失败");
foreach($userlist as $_valuser) {
echo $_valuser->username;
echo "<br />";
}
?>
不明白的在问把,不太会写教程,或者您有更好的方法,别忘记发给我一份 fdwl@msn.com
[ 本帖最后由 fdwl 于 2007-12-11 05:19 PM 编辑 ]