自己写着玩的,代码没有测试,不过觉得思路不错,如果能够加上部分异常处理的功能,应该比较帅了,支持PHP4/PHP5,恩,虽然没有ADOdb或者PEAR::DB强,不错一般应用应该不错,恩。
喜欢的就自己拿去用吧,自己随便改,呵呵,也欢迎提意见。(注释遵循PHPDoc的标准,便于生成手册)
注意:代码未经测试,出现问题可要自己负责哇,呵呵。
<?
// ==========================================
// 文件: SimpleDB.class.php
// 程序: MySQL数据库操作类
// 作者: heiyeluren <http://blog.csdn.net/heiyeshuwu
// 时间: 2006-09-20
//==========================================
class SimpleDB
{
/* *
* 连接标识
* @var resource
*/
var $dbLink ;
/* *
* 数据库查询语句
* @var string
*/
var $dbSql ;
/* *
* 查询结果
* @var resource
*/
var $dbResult ;
/* *
* 查询记录集
* @var array
*/
var $dbRecord ;
/* *
* 数据库字符集
* @var string
*/
var $dbCharset = ' GBK ' ;
/* *
* 数据库结果集提取方式
* @var int
*/
var $fetchMode = MYSQL_ASSOC;
/* *
* 日志保存路径
* @var string
*/
var $logPath = ' /tmp/mysql_log ' ;
/* *
* 是否记录SQL查询失败的SQL日志,缺省是false
* @var bool
*/
var $isLog = false ;
/* *
* 是否在SQL查询出错的时候显示错误并且终止脚本执行,缺省是true
*
* @var bool
*/
var $isError = true ;
// --------------------------
// 内部接口
//--------------------------
/* *
* 构造函数
*
* @param string $db_host 连接主机
* @param string $db_user 连接用户
* @param string $db_passwd 数据库密码
* @param string $db_name 数据库
* @param bool $is_pconnect 是否长连接,默认是否
* @return SimpleDB
*/
function SimpleDB( $db_host , $db_user , $db_passwd , $db_name , $is_pconnect = false ){
$this -> connect( $db_host , $db_user , $db_passwd , $db_name , $is_pconnect );
}
/* *
* 连接数据库
*
* @param string $db_host 数据库主机地址,例如:localhost,或者 localhost:3306
* @param string $db_user 连接数据库的用户
* @param string $db_passwd 用户密码
* @param string $db_name 数据库名字
* @param boo $is_pconnect 是否使用长连接
* @return resource 返回连接资源标识符
*/
function connect( $db_host , $db_user , $db_passwd , $db_name , $is_pconnect ){
if ( $is_pconnect ){
return $this -> dbLink = @ mysql_pconnect ( $db_host , $db_user , $db_passwd );
}
$this -> dbLink = @ mysql_connect ( $db_host , $db_user , $db_passwd );
@ mysql_select_db ( $db_name , $this -> dbLink);
$mysql_version = $this -> getOne( " SELECT VERSION() " );
if ( $this -> dbCharset != '' && preg_match ( " /^(5.|4.1)/ " , $mysql_version )){
$this -> query( " SET NAMES '$this->dbCharset' " , $this -> dbLink);
}
return $this -> dbLink;
}
/* *
* 关闭数据库连接
*
* @return bool 是否成功关闭连接
*/
function disconnect(){
$ret = @ mysql_close ( $this -> dbLink);
$this -> dbLink = null ;
return $ret ;
}
/* *
* 设置查询结果返回数据类型
*
* @param int $modeType 设置查询结果返回设置,1为关联索引和数字所有都有,2为使用关联索引,3为使用数字索引
*/
function setFetchMode( $modeType ){
switch ( $modeType ){
case 1 : // 数字索引和关联索引都有
$this -> fetchMode = MYSQL_BOTH;
break ;
case 2 : // 使用关联索引
$this -> fetchMode = MYSQL_ASSOC;
break ;
case 3 : // 使用数字索引
$this -> fetchMode = MYSQL_NUM;
break ;
default : // 缺省使用关联索引
$this -> fetchMode = MYSQL_ASSOC;
}
}
/* *
* 设置数据库客户端提取结果集的字符编码
*
* @param string $charset 编码的字符串,比如 UTF8,GBK之类的,缺省是GBK
*/
function setCharset( $charset ){
if ( $charset != '' ){
$this -> dbCharset = $charset ;
}
}
/* *
* 设置日志存储路径
*
* @param string $log_path 日志路径,该必须是可写的
*/
function setLogPath( $log_path ){
if ( $log_path != '' ){
$this -> logPath = $log_path ;
}
}
/* *
* 写SQL执行日志
*
* @param string $sql 查询的SQL语句
* @param string $file 当前执行查询的文件
*/
function writeLog( $sql , $file ){
if ( ! file_exists ( $this -> logPath)){
@ mkdir ( $this -> logPath);
}
$log_file = $this -> logPath . " /mysql_ " . date ( " Y-m-d " ) . " .log " ;
$log_msg = " [ " . date ( " Y-m-d H:i:s " ) . " ] - " . $file . " : " . $sql . " " ;
error_log ( $log_msg , 3 , $log_file );
}
/* *
* 显示上依次SQL执行错误的错误信息
*/
function showError(){
$errMessage = " MySQL query error " . mysql_errno ( $this -> dbLink) . " : " . mysql_error ( $this -> dbLink);
die ( $errMessage );
}
/* *
* 返回MySQL的版本信息
*
* @return string Mysql的版本
*/
function getVersion(){
return $this -> getOne( " SELECT VERSION() " );
}
/* *
* 查询操作的底层接口
*
* @param string $sql 要执行查询的SQL语句
* @return bool 执行成功返回true,失败返回false
*/
function query( $sql ){
$this -> dbSql = $sql ;
$this -> dbResult = null ;
$this -> dbResult = @ mysql_query ( $sql , $this -> dbLink);
if ( $this -> dbResult === false ){
if ( $this -> isLog){
$this -> writeLog( $sql , __FILE__ );
}
if ( $this -> isError){
$this -> showError();
}
return false ;
}
return true ;
}
// --------------------------
// 数据获取接口
//--------------------------
/* *
* 获取SQL执行的全部结果集(二维数组)
*
* @param string $sql 需要执行查询的SQL语句
* @return 成功返回查询结果的二维数组,失败返回false
*/
function getAll( $sql ){
if ( ! $this -> query( $sql )){
return false ;
}
$this -> dbRecord = array ();
while ( $row = @ mysql_fetch_array ( $this -> dbResult , $this -> fetchMode)) {
$this -> dbRecord[] = $row ;
}
@ mysql_free_result ( $this -> dbResult);
if ( ! is_array ( $this -> dbRecord) || empty ( $this -> dbRecord)){
return false ;
}
return $this -> dbRecord;
}
/* *
* 获取单行记录(一维数组)
*
* @param string $sql 需要执行查询的SQL语句
* @return 成功返回结果记录的一维数组,失败返回false
*/
function getRow( $sql ){
if ( ! $this -> query( $sql )){
return false ;
}
$this -> dbRecord = array ();
$this -> dbRecord = @ mysql_fetch_array ( $this -> dbResult , $this -> fetchMode);
@ mysql_free_result ( $this -> dbResult);
if ( ! is_array ( $this -> dbRecord) || empty ( $this -> dbRecord)){
return false ;
}
return $this -> dbRecord;
}
/* *
* 获取一列数据(一维数组)
*
* @param string $sql 需要获取的字符串
* @param string $field 需要获取的列,如果不指定,默认是第一列
* @return 成功返回提取的结果记录的一维数组,失败返回false
*/
function getCol( $sql , $field = '' ){
if ( ! $this -> query( $sql )){
return false ;
}
$this -> dbRecord = array ();
while ( $row = @ mysql_fetch_array ( $this -> dbResult , $this -> fetchMode)){
if ( trim ( $field ) == '' ){
$this -> dbRecord[] = current ( $row );
} else {
$this -> dbRecord[] = $row [ $field ];
}
}
@ mysql_free_result ( $this -> dbResult);
if ( ! is_array ( $this -> dbRecord) || empty ( $this -> dbRecord)){
return false ;
}
return $this -> dbRecord;
}
/* *
* 获取一个数据(当条数组)
*
* @param string $sql 需要执行查询的SQL
* @return 成功返回获取的一个数据,失败返回false
*/
function getOne( $sql , $field = '' ){
if ( ! $this -> query( $sql )){
return false ;
}
$this -> dbRecord = array ();
$row = @ mysql_fetch_array ( $this -> dbResult , $this -> fetchMode);
@ mysql_free_result ( $this -> dbResult);
if ( ! is_array ( $row ) || empty ( $row )){
return false ;
}
if ( trim ( $field ) != '' ){
$this -> dbRecord = $row [ $field ];
} else {
$this -> dbRecord = current ( $row );
}
return $this -> dbRecord;
}
/* *
* 获取指定各种条件的记录
*
* @param string $table 表名(访问的数据表)
* @param string $field 字段(要获取的字段)
* @param string $where 条件(获取记录的条件语句,不包括WHERE,默认为空)
* @param string $order 排序(按照什么字段排序,不包括ORDER BY,默认为空)
* @param string $limit 限制记录(需要提取多少记录,不包括LIMIT,默认为空)
* @param bool $single 是否只是取单条记录(是调用getRow还是getAll,默认是false,即调用getAll)
* @return 成功返回记录结果集的数组,失败返回false
*/
function getRecord( $table , $field = ' * ' , $where = '' , $order = '' , $limit = '' , $single = false ){
$sql = " SELECT $field FROM $table " ;
$sql .= trim ( $where ) != '' ? " WHERE $where " : $where ;
$sql .= trim ( $order ) != '' ? " ORDER BY $order " : $order ;
$sql .= trim ( $limit ) != '' ? " LIMIT $limit " : $limit ;
if ( $single ){
return $this -> getRow( $sql );
}
return $this -> getAll( $sql );
}
/* *
* 获取指点各种条件的记录(跟getRecored类似)
*
* @param string $table 表名(访问的数据表)
* @param string $field 字段(要获取的字段)
* @param string $where 条件(获取记录的条件语句,不包括WHERE,默认为空)
* @param array $order_arr 排序数组(格式类似于: array('id'=>true), 那么就是按照ID为顺序排序, array('id'=>false), 就是按照ID逆序排序)
* @param array $limit_arr 提取数据的限制数组()
* @return unknown
*/
function getSpecifyRecord( $table , $field = ' * ' , $where = '' , $order_arr = array () , $limit_arr = array ()){
$sql = " SELECT $field FROM $table " ;
$sql .= trim ( $where ) != '' ? " WHERE $where " : $where ;
if ( is_array ( $order_arr ) && ! empty ( $order_arr )){
$arr_key = key ( $order_arr );
$sql .= " ORDER BY $arr_key " . ( $order_arr [ $arr_key ] ? " ASC " : " DESC " );
}
if ( is_array ( $limit_arr ) && ! empty ( $limit_arr )){
$start_post = intval ( array_shift ( $limit_arr ));
$offset = intval ( array_shift ( $limit_arr ));
$sql .= " LIMIT $start_post,$offset " ;
}
return $this -> getAll( $sql );
}
/* *
* 获取指定条数的记录
*
* @param string $table 表名
* @param int $start_pos 开始记录
* @param int $offset 偏移量
* @param string $field 字段名
* @param string $where 条件(获取记录的条件语句,不包括WHERE,默认为空)
* @param string $order 排序(按照什么字段排序,不包括ORDER BY,默认为空)
* @return 成功返回包含记录的二维数组,失败返回false
*/
function getLimitRecord( $table , $start_pos , $offset , $field = ' * ' , $where = '' , $oder = '' ){
$sql = " SELECT $field FROM $table " ;
$sql .= trim ( $where ) != '' ? " WHERE $where " : $where ;
$sql .= trim ( $order ) != '' ? " ORDER BY $order " : $order ;
$sql .= " LIMIT $start_pos,$offset " ;
return $this -> getAll( $sql );
}
/* *
* 获取排序记录
*
* @param string $table 表名
* @param string $order_field 需要排序的字段(比如id)
* @param string $order_method 排序的方式(1为顺序, 2为逆序, 默认是1)
* @param string $field 需要提取的字段(默认是*,就是所有字段)
* @param string $where 条件(获取记录的条件语句,不包括WHERE,默认为空)
* @param string $limit 限制记录(需要提取多少记录,不包括LIMIT,默认为空)
* @return 成功返回记录的二维数组,失败返回false
*/
function getOrderRecord( $table , $order_field , $order_method = 1 , $field = ' * ' , $where = '' , $limit = '' ){
// $order_method的值为1则为顺序, $order_method值为2则2则是逆序排列
$sql = " SELECT $field FROM $table " ;
$sql .= trim ( $where ) != '' ? " WHERE $where " : $where ;
$sql .= " ORDER BY $order_field " . ( $order_method == 1 ? " ASC " : " DESC " );
$sql .= trim ( $limit ) != '' ? " LIMIT $limit " : $limit ;
return $this -> getAll( $sql );
}
/* *
* 分页查询(限制查询的记录条数)
*
* @param string $sql 需要查询的SQL语句
* @param int $start_pos 开始记录的条数
* @param int $offset 每次的偏移量,需要获取多少条
* @return 成功返回获取结果记录的二维数组,失败返回false
*/
function limitQuery( $sql , $start_pos , $offset ){
$start_pos = intval ( $start_pos );
$offset = intval ( $offset );
$sql = $sql . " LIMIT $start_pos,$offset " ;
return $this -> getAll( $sql );
}
// --------------------------
// 无数据返回操作
//--------------------------
/* *
* 执行执行非Select查询操作
*
* @param string $sql 查询SQL语句
* @return bool 成功执行返回true, 失败返回false
*/
function execute( $sql ){
if ( ! $this -> query( $sql )){
return false ;
}
$count = @ mysql_affected_rows ( $this -> dbLink);
if ( $count <= 0 ){
return false ;
}
return true ;
}
/* *
* 自动执行操作(针对Insert/Update操作)
*
* @param string $table 表名
* @param array $field_array 字段数组(数组中的键相当于字段名,数组值相当于值, 类似 array( 'id' => 100, 'user' => 'heiyeluren')
* @param int $mode 执行操作的模式 (是插入还是更新操作, 1是插入操作Insert, 2是更新操作Update)
* @param string $where 如果是更新操作,可以添加WHERE的条件
* @return bool 执行成功返回true, 失败返回false
*/
function autoExecute( $table , $field_array , $mode , $where = '' ){
if ( $table == '' || ! is_array ( $field_array ) || empty ( $field_array )){
return false ;
}
// $mode为1是插入操作(Insert), $mode为2是更新操作
if ( $mode == 1 ){
$sql = " INSERT INTO $table SET " ;
} else {
$sql = " UPDATE $table SET " ;
}
foreach ( $field_array as $key => $value ){
$sql .= " $key='$value', " ;
}
$sql = rtrim ( $sql , ' , ' );
if ( $mode == 2 && $where != '' ){
$sql .= " WHERE $where " ;
}
return $this -> execute( $sql );
}
// --------------------------
// 其他数据相关操作
//--------------------------
/* *
* 获取最后一次查询的SQL语句
*
* @return string 返回最后一次查询的SQL语句
*/
function getLastSql(){
return $this -> dbSql;
}
/* *
* 获取上次插入操作的的ID
*
* @return int 如果没有连接或者查询失败,返回0, 成功返回ID
*/
function getLastId(){
if ( ! $this -> dbLink){
return 0 ;
}
if (( $last_id = mysql_insert_id ( $this -> dbLink)) > 0 ){
return $last_id ;
}
return $this -> getOne( " SELECT LAST_INSERT_ID() " );
}
/* *
* 获取记录集里面的记录条数 (用于Select操作)
*
* @return int 如果上一次无结果集或者记录结果集为空,返回0, 否则返回结果集数量
*/
function getNumRows(){
if ( ! $this -> dbResult){
return 0 ;
}
return mysql_num_rows ( $this -> dbResult);
}
/* *
* 获取受到影响的记录数量 (用于Update/Delete/Insert操作)
*
* @return int 如果没有连接或者影响记录为空, 否则返回影响的行数量
*/
function getAffectedRows(){
if ( ! $this -> dbLink){
return 0 ;
}
return mysql_affected_rows ( $this -> dbLink);
}
}
?>
// ==========================================
// 文件: SimpleDB.class.php
// 程序: MySQL数据库操作类
// 作者: heiyeluren <http://blog.csdn.net/heiyeshuwu
// 时间: 2006-09-20
//==========================================
class SimpleDB
{
/* *
* 连接标识
* @var resource
*/
var $dbLink ;
/* *
* 数据库查询语句
* @var string
*/
var $dbSql ;
/* *
* 查询结果
* @var resource
*/
var $dbResult ;
/* *
* 查询记录集
* @var array
*/
var $dbRecord ;
/* *
* 数据库字符集
* @var string
*/
var $dbCharset = ' GBK ' ;
/* *
* 数据库结果集提取方式
* @var int
*/
var $fetchMode = MYSQL_ASSOC;
/* *
* 日志保存路径
* @var string
*/
var $logPath = ' /tmp/mysql_log ' ;
/* *
* 是否记录SQL查询失败的SQL日志,缺省是false
* @var bool
*/
var $isLog = false ;
/* *
* 是否在SQL查询出错的时候显示错误并且终止脚本执行,缺省是true
*
* @var bool
*/
var $isError = true ;
// --------------------------
// 内部接口
//--------------------------
/* *
* 构造函数
*
* @param string $db_host 连接主机
* @param string $db_user 连接用户
* @param string $db_passwd 数据库密码
* @param string $db_name 数据库
* @param bool $is_pconnect 是否长连接,默认是否
* @return SimpleDB
*/
function SimpleDB( $db_host , $db_user , $db_passwd , $db_name , $is_pconnect = false ){
$this -> connect( $db_host , $db_user , $db_passwd , $db_name , $is_pconnect );
}
/* *
* 连接数据库
*
* @param string $db_host 数据库主机地址,例如:localhost,或者 localhost:3306
* @param string $db_user 连接数据库的用户
* @param string $db_passwd 用户密码
* @param string $db_name 数据库名字
* @param boo $is_pconnect 是否使用长连接
* @return resource 返回连接资源标识符
*/
function connect( $db_host , $db_user , $db_passwd , $db_name , $is_pconnect ){
if ( $is_pconnect ){
return $this -> dbLink = @ mysql_pconnect ( $db_host , $db_user , $db_passwd );
}
$this -> dbLink = @ mysql_connect ( $db_host , $db_user , $db_passwd );
@ mysql_select_db ( $db_name , $this -> dbLink);
$mysql_version = $this -> getOne( " SELECT VERSION() " );
if ( $this -> dbCharset != '' && preg_match ( " /^(5.|4.1)/ " , $mysql_version )){
$this -> query( " SET NAMES '$this->dbCharset' " , $this -> dbLink);
}
return $this -> dbLink;
}
/* *
* 关闭数据库连接
*
* @return bool 是否成功关闭连接
*/
function disconnect(){
$ret = @ mysql_close ( $this -> dbLink);
$this -> dbLink = null ;
return $ret ;
}
/* *
* 设置查询结果返回数据类型
*
* @param int $modeType 设置查询结果返回设置,1为关联索引和数字所有都有,2为使用关联索引,3为使用数字索引
*/
function setFetchMode( $modeType ){
switch ( $modeType ){
case 1 : // 数字索引和关联索引都有
$this -> fetchMode = MYSQL_BOTH;
break ;
case 2 : // 使用关联索引
$this -> fetchMode = MYSQL_ASSOC;
break ;
case 3 : // 使用数字索引
$this -> fetchMode = MYSQL_NUM;
break ;
default : // 缺省使用关联索引
$this -> fetchMode = MYSQL_ASSOC;
}
}
/* *
* 设置数据库客户端提取结果集的字符编码
*
* @param string $charset 编码的字符串,比如 UTF8,GBK之类的,缺省是GBK
*/
function setCharset( $charset ){
if ( $charset != '' ){
$this -> dbCharset = $charset ;
}
}
/* *
* 设置日志存储路径
*
* @param string $log_path 日志路径,该必须是可写的
*/
function setLogPath( $log_path ){
if ( $log_path != '' ){
$this -> logPath = $log_path ;
}
}
/* *
* 写SQL执行日志
*
* @param string $sql 查询的SQL语句
* @param string $file 当前执行查询的文件
*/
function writeLog( $sql , $file ){
if ( ! file_exists ( $this -> logPath)){
@ mkdir ( $this -> logPath);
}
$log_file = $this -> logPath . " /mysql_ " . date ( " Y-m-d " ) . " .log " ;
$log_msg = " [ " . date ( " Y-m-d H:i:s " ) . " ] - " . $file . " : " . $sql . " " ;
error_log ( $log_msg , 3 , $log_file );
}
/* *
* 显示上依次SQL执行错误的错误信息
*/
function showError(){
$errMessage = " MySQL query error " . mysql_errno ( $this -> dbLink) . " : " . mysql_error ( $this -> dbLink);
die ( $errMessage );
}
/* *
* 返回MySQL的版本信息
*
* @return string Mysql的版本
*/
function getVersion(){
return $this -> getOne( " SELECT VERSION() " );
}
/* *
* 查询操作的底层接口
*
* @param string $sql 要执行查询的SQL语句
* @return bool 执行成功返回true,失败返回false
*/
function query( $sql ){
$this -> dbSql = $sql ;
$this -> dbResult = null ;
$this -> dbResult = @ mysql_query ( $sql , $this -> dbLink);
if ( $this -> dbResult === false ){
if ( $this -> isLog){
$this -> writeLog( $sql , __FILE__ );
}
if ( $this -> isError){
$this -> showError();
}
return false ;
}
return true ;
}
// --------------------------
// 数据获取接口
//--------------------------
/* *
* 获取SQL执行的全部结果集(二维数组)
*
* @param string $sql 需要执行查询的SQL语句
* @return 成功返回查询结果的二维数组,失败返回false
*/
function getAll( $sql ){
if ( ! $this -> query( $sql )){
return false ;
}
$this -> dbRecord = array ();
while ( $row = @ mysql_fetch_array ( $this -> dbResult , $this -> fetchMode)) {
$this -> dbRecord[] = $row ;
}
@ mysql_free_result ( $this -> dbResult);
if ( ! is_array ( $this -> dbRecord) || empty ( $this -> dbRecord)){
return false ;
}
return $this -> dbRecord;
}
/* *
* 获取单行记录(一维数组)
*
* @param string $sql 需要执行查询的SQL语句
* @return 成功返回结果记录的一维数组,失败返回false
*/
function getRow( $sql ){
if ( ! $this -> query( $sql )){
return false ;
}
$this -> dbRecord = array ();
$this -> dbRecord = @ mysql_fetch_array ( $this -> dbResult , $this -> fetchMode);
@ mysql_free_result ( $this -> dbResult);
if ( ! is_array ( $this -> dbRecord) || empty ( $this -> dbRecord)){
return false ;
}
return $this -> dbRecord;
}
/* *
* 获取一列数据(一维数组)
*
* @param string $sql 需要获取的字符串
* @param string $field 需要获取的列,如果不指定,默认是第一列
* @return 成功返回提取的结果记录的一维数组,失败返回false
*/
function getCol( $sql , $field = '' ){
if ( ! $this -> query( $sql )){
return false ;
}
$this -> dbRecord = array ();
while ( $row = @ mysql_fetch_array ( $this -> dbResult , $this -> fetchMode)){
if ( trim ( $field ) == '' ){
$this -> dbRecord[] = current ( $row );
} else {
$this -> dbRecord[] = $row [ $field ];
}
}
@ mysql_free_result ( $this -> dbResult);
if ( ! is_array ( $this -> dbRecord) || empty ( $this -> dbRecord)){
return false ;
}
return $this -> dbRecord;
}
/* *
* 获取一个数据(当条数组)
*
* @param string $sql 需要执行查询的SQL
* @return 成功返回获取的一个数据,失败返回false
*/
function getOne( $sql , $field = '' ){
if ( ! $this -> query( $sql )){
return false ;
}
$this -> dbRecord = array ();
$row = @ mysql_fetch_array ( $this -> dbResult , $this -> fetchMode);
@ mysql_free_result ( $this -> dbResult);
if ( ! is_array ( $row ) || empty ( $row )){
return false ;
}
if ( trim ( $field ) != '' ){
$this -> dbRecord = $row [ $field ];
} else {
$this -> dbRecord = current ( $row );
}
return $this -> dbRecord;
}
/* *
* 获取指定各种条件的记录
*
* @param string $table 表名(访问的数据表)
* @param string $field 字段(要获取的字段)
* @param string $where 条件(获取记录的条件语句,不包括WHERE,默认为空)
* @param string $order 排序(按照什么字段排序,不包括ORDER BY,默认为空)
* @param string $limit 限制记录(需要提取多少记录,不包括LIMIT,默认为空)
* @param bool $single 是否只是取单条记录(是调用getRow还是getAll,默认是false,即调用getAll)
* @return 成功返回记录结果集的数组,失败返回false
*/
function getRecord( $table , $field = ' * ' , $where = '' , $order = '' , $limit = '' , $single = false ){
$sql = " SELECT $field FROM $table " ;
$sql .= trim ( $where ) != '' ? " WHERE $where " : $where ;
$sql .= trim ( $order ) != '' ? " ORDER BY $order " : $order ;
$sql .= trim ( $limit ) != '' ? " LIMIT $limit " : $limit ;
if ( $single ){
return $this -> getRow( $sql );
}
return $this -> getAll( $sql );
}
/* *
* 获取指点各种条件的记录(跟getRecored类似)
*
* @param string $table 表名(访问的数据表)
* @param string $field 字段(要获取的字段)
* @param string $where 条件(获取记录的条件语句,不包括WHERE,默认为空)
* @param array $order_arr 排序数组(格式类似于: array('id'=>true), 那么就是按照ID为顺序排序, array('id'=>false), 就是按照ID逆序排序)
* @param array $limit_arr 提取数据的限制数组()
* @return unknown
*/
function getSpecifyRecord( $table , $field = ' * ' , $where = '' , $order_arr = array () , $limit_arr = array ()){
$sql = " SELECT $field FROM $table " ;
$sql .= trim ( $where ) != '' ? " WHERE $where " : $where ;
if ( is_array ( $order_arr ) && ! empty ( $order_arr )){
$arr_key = key ( $order_arr );
$sql .= " ORDER BY $arr_key " . ( $order_arr [ $arr_key ] ? " ASC " : " DESC " );
}
if ( is_array ( $limit_arr ) && ! empty ( $limit_arr )){
$start_post = intval ( array_shift ( $limit_arr ));
$offset = intval ( array_shift ( $limit_arr ));
$sql .= " LIMIT $start_post,$offset " ;
}
return $this -> getAll( $sql );
}
/* *
* 获取指定条数的记录
*
* @param string $table 表名
* @param int $start_pos 开始记录
* @param int $offset 偏移量
* @param string $field 字段名
* @param string $where 条件(获取记录的条件语句,不包括WHERE,默认为空)
* @param string $order 排序(按照什么字段排序,不包括ORDER BY,默认为空)
* @return 成功返回包含记录的二维数组,失败返回false
*/
function getLimitRecord( $table , $start_pos , $offset , $field = ' * ' , $where = '' , $oder = '' ){
$sql = " SELECT $field FROM $table " ;
$sql .= trim ( $where ) != '' ? " WHERE $where " : $where ;
$sql .= trim ( $order ) != '' ? " ORDER BY $order " : $order ;
$sql .= " LIMIT $start_pos,$offset " ;
return $this -> getAll( $sql );
}
/* *
* 获取排序记录
*
* @param string $table 表名
* @param string $order_field 需要排序的字段(比如id)
* @param string $order_method 排序的方式(1为顺序, 2为逆序, 默认是1)
* @param string $field 需要提取的字段(默认是*,就是所有字段)
* @param string $where 条件(获取记录的条件语句,不包括WHERE,默认为空)
* @param string $limit 限制记录(需要提取多少记录,不包括LIMIT,默认为空)
* @return 成功返回记录的二维数组,失败返回false
*/
function getOrderRecord( $table , $order_field , $order_method = 1 , $field = ' * ' , $where = '' , $limit = '' ){
// $order_method的值为1则为顺序, $order_method值为2则2则是逆序排列
$sql = " SELECT $field FROM $table " ;
$sql .= trim ( $where ) != '' ? " WHERE $where " : $where ;
$sql .= " ORDER BY $order_field " . ( $order_method == 1 ? " ASC " : " DESC " );
$sql .= trim ( $limit ) != '' ? " LIMIT $limit " : $limit ;
return $this -> getAll( $sql );
}
/* *
* 分页查询(限制查询的记录条数)
*
* @param string $sql 需要查询的SQL语句
* @param int $start_pos 开始记录的条数
* @param int $offset 每次的偏移量,需要获取多少条
* @return 成功返回获取结果记录的二维数组,失败返回false
*/
function limitQuery( $sql , $start_pos , $offset ){
$start_pos = intval ( $start_pos );
$offset = intval ( $offset );
$sql = $sql . " LIMIT $start_pos,$offset " ;
return $this -> getAll( $sql );
}
// --------------------------
// 无数据返回操作
//--------------------------
/* *
* 执行执行非Select查询操作
*
* @param string $sql 查询SQL语句
* @return bool 成功执行返回true, 失败返回false
*/
function execute( $sql ){
if ( ! $this -> query( $sql )){
return false ;
}
$count = @ mysql_affected_rows ( $this -> dbLink);
if ( $count <= 0 ){
return false ;
}
return true ;
}
/* *
* 自动执行操作(针对Insert/Update操作)
*
* @param string $table 表名
* @param array $field_array 字段数组(数组中的键相当于字段名,数组值相当于值, 类似 array( 'id' => 100, 'user' => 'heiyeluren')
* @param int $mode 执行操作的模式 (是插入还是更新操作, 1是插入操作Insert, 2是更新操作Update)
* @param string $where 如果是更新操作,可以添加WHERE的条件
* @return bool 执行成功返回true, 失败返回false
*/
function autoExecute( $table , $field_array , $mode , $where = '' ){
if ( $table == '' || ! is_array ( $field_array ) || empty ( $field_array )){
return false ;
}
// $mode为1是插入操作(Insert), $mode为2是更新操作
if ( $mode == 1 ){
$sql = " INSERT INTO $table SET " ;
} else {
$sql = " UPDATE $table SET " ;
}
foreach ( $field_array as $key => $value ){
$sql .= " $key='$value', " ;
}
$sql = rtrim ( $sql , ' , ' );
if ( $mode == 2 && $where != '' ){
$sql .= " WHERE $where " ;
}
return $this -> execute( $sql );
}
// --------------------------
// 其他数据相关操作
//--------------------------
/* *
* 获取最后一次查询的SQL语句
*
* @return string 返回最后一次查询的SQL语句
*/
function getLastSql(){
return $this -> dbSql;
}
/* *
* 获取上次插入操作的的ID
*
* @return int 如果没有连接或者查询失败,返回0, 成功返回ID
*/
function getLastId(){
if ( ! $this -> dbLink){
return 0 ;
}
if (( $last_id = mysql_insert_id ( $this -> dbLink)) > 0 ){
return $last_id ;
}
return $this -> getOne( " SELECT LAST_INSERT_ID() " );
}
/* *
* 获取记录集里面的记录条数 (用于Select操作)
*
* @return int 如果上一次无结果集或者记录结果集为空,返回0, 否则返回结果集数量
*/
function getNumRows(){
if ( ! $this -> dbResult){
return 0 ;
}
return mysql_num_rows ( $this -> dbResult);
}
/* *
* 获取受到影响的记录数量 (用于Update/Delete/Insert操作)
*
* @return int 如果没有连接或者影响记录为空, 否则返回影响的行数量
*/
function getAffectedRows(){
if ( ! $this -> dbLink){
return 0 ;
}
return mysql_affected_rows ( $this -> dbLink);
}
}
?>