重新封装的PHPLib DB类 (推荐简单项目使用本类库)
为了便于自己的开发,但是又不想使用ADODB、PEAR::DB这样的庞然大物,就在PHPLib DB类的基础上、参考PEAR::DB类,封装了自己的DB类,简单好使,非常方便。目前只针对MySQL有效,没什么技术含量,姑且为参考。
使用本类库只是需要把下面代码保存为database.inc.php或者database.class.php,在自己需要的地方include进来,然后实例化对象,然后调用连接方法,最后在执行操作。
[ 连接数据库 ]
//包含数据库处理类文件
include_once("database.inc.php");
//本地数据库配置
define("DB_HOST", "localhost"); //数据库服务器
define("DB_USER_NAME", "root"); //数据库用户名
define("DB_USER_PASS", ""); //密码
define("DB_DATABASE", "test"); //数据库
//连接本地数据库
$db = new DB_Sql();
$db->connect(DB_DATABASE, DB_HOST, DB_USER_NAME, DB_USER_PASS);
[ 使用方法 ]
//获取所有记录
$sql = "SELECT * FROM table1";
$all_record = $db->get_all($sql);
//获取一条
$sql = "SELECT * FROM table1 WHERE id = '1'";
$one_row = $db->get_one($sql);
//分页查询,提取20条记录
$sql = "SELECT * FROM table1";
$page_record = $db->limit_query($sql, $start=0, $offset=20, $order="ORDER BY id DESC");
//提取指定数目的记录
$sql = "SELECT * FROM table1";
$limit_record = $db->get_limit($sql);
//统计记录数,统计所有类型为学生的
$count = $db->count("table1", "id", "type = 'student'");
//插入一条记录
$info_array = array(
"name" => "heiyeluren",
"type" => "student",
"age" => "22",
"gender" => "boy"
);
$db->insert("table1", $info_array);
//更新一条记录
$info_array = array(
"name" => "heiyeluren",
"type" => "teacher",
"age" => "22",
"gender" => "boy"
);
$db->update("table1", $info_array, "name = 'heiyeluren'");
//删除记录
$db->delete("table1", "name = 'heiyeluren'");
//执行一条无结果集的SQL
$db->execute("DELETE FROM table1 WHERE name = 'heiyeluren'");
[ 类库代码 ]
class DB_Sql /* public: configuration parameters */ /* public: result array and current row number */ /* public: current error number and error text */ /* public: this is an api revision, not a CVS revision. */ /* private: link and query handles */ var $locked = false; ## set to true while we have a lock /* public: constructor */ function query_id() { /* public: connection management */ if ("" == $Host) if ("" == $User) if ("" == $Password) if (!@mysql_select_db($Database,$this->Link_ID)) { /* public: discard the query result */ /* public: perform a query */ if (!$this->connect()) { # New query, discard previous result. if ($this->Debug) $this->Query_ID = @mysql_query($Query_String,$this->Link_ID); # Will return nada if it fails. That's fine. /* public: walk result set */ $this->Record = @mysql_fetch_array($this->Query_ID); $stat = is_array($this->Record); /* public: position in result set */ /* half assed attempt to save the day, return 1; /* public: table locking */ // set before unlock to avoid potential loop if(!$this->query("unlock tables")) { /* public: evaluate the result (size, width) */ function num_rows() { function num_fields() { /* public: shorthand notation */ function np() { function f($Name) { function p($Name) { /* public: sequence numbers */ /* public: return table metadata */ /* // if no $table specified, assume that we are working with a query // made this IF due to performance (one if is faster than $count if's) /* public: find available table names */ /* private: error handling */ if ($this->locked) { if ($this->Halt_On_Error == "no") $this->haltmsg($msg); if ($this->Halt_On_Error != "report") function haltmsg($msg) { |
/n", $msg);
printf(" MySQL Error: %s (%s)
/n",
$this->Errno,
$this->Error);
}
//----------------------------------
// 模块: 自定义函数
// 功能: 部分实用的数据库处理方法
// 作者: heiyeluren
// 时间: 2005-12-26
//----------------------------------
/**
* 方法: execute($sql)
* 功能: 执行一条SQL语句,主要针对没有结果集返回的SQL
* 参数: $sql 需要执行的SQL语句,例如:execute("DELETE FROM table1 WHERE id = '1'")
* 返回: 更新成功返回True,失败返回False
*/
function execute($sql)
{
if (empty($sql))
{
$this->error("Invalid parameter");
}
if (!$this->query($sql))
{
return false;
}
return true;
}
/**
* 方法: get_all($sql)
* 功能: 获取SQL执行的所有记录
* 参数: $sql 需要执行的SQL,例如: get_all("SELECT * FROM Table1")
* 返回: 返回包含所有查询结果的二维数组
*/
function get_all($sql)
{
$this->query($sql);
$result_array = array();
while($this->next_record())
{
$result_array[] = $this->Record;
}
if (count($result_array)<=0)
{
return 0;
}
return $result_array;
}
/**
* 方法: get_one($sql)
* 功能: 获取SQL执行的一条记录
* 参数: $sql 需要执行的SQL,例如: get_one("SELECT * FROM Table1 WHERE id = '1'")
* 返回: 返回包含一条查询结果的一维数组
*/
function get_one($sql)
{
$this->query($sql);
if (!$this->next_record())
{
return 0;
}
return $this->Record;
}
/**
* 方法: get_limit($sql, $limit)
* 功能: 获取SQL执行的指定数量的记录
* 参数:
* $sql 需要执行的SQL,例如: SELECT * FROM Table1
* $limit 需要限制的记录数
* 例如 需要获取10条记录, get_limit("SELECT * FROM Table1", 10);
*
* 返回: 返回包含所有查询结果的二维数组
*/
function get_limit($sql, $limit)
{
$this->query($sql);
$result_array = array();
for ($i=0; $i<$limit&&$this->next_record(); $i++)
{
$result_array[] = $this->Record;
}
if (count($result_array) <= 0)
{
return 0;
}
return $result_array;
}
/**
* 方法: limit_query($sql, $start=0, $offset=20, $order="")
* 功能: 为分页的获取SQL执行的指定数量的记录
* 参数:
* $sql 需要执行的SQL,例如: SELECT * FROM Table1
* $start 记录的开始数, 缺省为0
* $offset 记录的偏移量,缺省为20
* $order 排序方式,缺省为空,例如:ORDER BY id DESC
* 例如 需要获取从0到10的记录并且按照ID号倒排, get_limit("SELECT * FROM Table1", 0, 10, "ORDER BY id DESC");
*
* 返回: 返回包含所有查询结果的二维数组
*/
function limit_query($sql, $start=0, $offset=20, $order="")
{
$sql = $sql ." $order LIMIT $start,$offset";
$this->query($sql);
$result = array();
while($this->next_record())
{
$result[] = $this->Record;
}
if (count($result) <=0 )
{
return 0;
}
return $result;
}
/**
* 方法: count($table,$field="*", $where="")
* 功能: 统计表中数据总数
* 参数:
* $table 需要统计的表名
* $field 需要统计的字段,默认为*
* $where 条件语句,缺省为空
* 例如 按照ID统计所有年龄小于20岁的用户, count("user_table", "id", "user_age < 20")
*
* 返回: 返回统计结果的数字
*/
function count($table,$field="*", $where="")
{
$sql = (empty($where) ? "SELECT COUNT($field) FROM $table" : "SELECT COUNT($field) FROM $table WHERE $where");
$result = $this->get_one($sql);
if (!is_array($result))
{
return 0;
}
return $result[0];
}
/**
* 方法: insert($table,$dataArray)
* 功能: 插入一条记录到表里
* 参数:
* $table 需要插入的表名
* $dataArray 需要插入字段和值的数组,键为字段名,值为字段值,例如:array("user_name"=>"张三", "user_age"=>"20岁");
* 例如 比如插入用户张三,年龄为20, insert("users", array("user_name"=>"张三", "user_age"=>"20岁"))
*
* 返回: 插入记录成功返回True,失败返回False
*/
function insert($table,$dataArray)
{
if (!is_array($dataArray) || count($dataArray)<=0)
{
$this->error("Invalid parameter");
}
while(list($key,$val) = each($dataArray))
{
$field .= "$key,";
$value .= "'$val',";
}
$field = substr($field, 0, -1);
$value = substr($value, 0, -1);
$sql = "INSERT INTO $table ($field) VALUES ($value)";
if (!$this->query($sql))
{
return false;
}
return true;
}
/**
* 方法: update($talbe, $dataArray, $where)
* 功能: 更新一条记录
* 参数:
* $table 需要更新的表名
* $dataArray 需要更新字段和值的数组,键为字段名,值为字段值,例如:array("user_name"=>"张三", "user_age"=>"20岁");
* $where 条件语句
* 例如 比如更新姓名为张三的用户为李四,年龄为21
* update("users", array("user_name"=>"张三", "user_age"=>"20岁"), "user_name='张三'")
*
* 返回: 更新成功返回True,失败返回False
*/
function update($talbe, $dataArray, $where)
{
if (!is_array($dataArray) || count($dataArray)<=0)
{
$this->error("Invalid parameter");
}
while(list($key,$val) = each($dataArray))
{
$value .= "$key = '$val',";
}
$value = substr($value, 0, -1);
$sql = "UPDATE $talbe SET $value WHERE $where";
if (!$this->query($sql))
{
return false;
}
return true;
}
/**
* 方法: delete($table, $where)
* 功能: 删除一条记录
* 参数:
* $table 需要删除记录的表名
* $where 需要删除记录的条件语句
* 例如 比如要删除用户名为张三的用户,delete("users", "user_name='张三'")
*
* 返回: 更新成功返回True,失败返回False
*/
function delete($table, $where)
{
if (empty($where))
{
$this->error("Invalid parameter");
}
$sql = "DELETE FROM $table WHERE $where";
if (!$this->query($sql))
{
return false;
}
return true;
}
/**
* 方法: error($msg="")
* 功能: 显示错误信息后中止脚本
* 参数: $msg 需要显示的错误信息
* 返回: 无返回
*/
function error($msg="")
{
echo "Error: $msg/n
/n";
exit();
}
/**
* 方法:get_insert_id()
* 功能:获取最后插入的ID
* 参数: 无参数
* 返回:关闭成功返回ID,失败返回0
*/
function get_insert_id()
{
return mysql_insert_id($this->Link_ID);
}
/**
* 方法:close()
* 功能:关闭当前数据库连接
* 参数: 无参数
* 返回:关闭成功返回true,失败返回false
*/
function close()
{
return mysql_close($this->Link_ID);
}
}
?>