10
2013-04

常用Sql类、分页类Sql.class.php

<?php
/**
 *名称:Sql.class.php
 **/
class Sql
{ 
private $db;
public function __construct() 
{
global $db;
$this->db = $db;
}
//$sql:sql语句,$max:每页多少条,$page:当前页
function listAll($sql, $max, $page)
{
$from = ($page-1)*$max;//从第几条数据开始取
//取得当前页面的数据
$sql .= " LIMIT ".$from.",".$max." ";
$res = $this->db->getAll($sql);
return $res ? $res : false;
}
//$sql:sql语句,$max:每页多少条,$page:当前页,$p是地址栏的页码字段名,$query是除$page之外的参数
function goPage($sql, $max, $page, $p='page', $query='')
{
$res = $this->db->getRow($sql);
$total = $res['total'];
$pages = ceil($total/$max);//总共有多少页
if($pages == 0)
{
return '';
}
$page = $page>$pages ? $pages : $page;
$goPage = '第'.$page.'页/共'.$pages.'页 每页'.$max.'条 总数量'.$total;
$goPage .= '&nbsp;<a href="'.$_SERVER['SCRIPT_NAME'].'?'.$p.'=1&'.$query.'">首页</a> ';
if($page<>1)
{
$goPage .= '<a href="'.$_SERVER["SCRIPT_NAME"].'?'.$p.'='.($page-1).'&'.$query.'">上一页</a>&nbsp;';
}
if($page<>$pages)
{
$goPage .= '<a href="'.$_SERVER["SCRIPT_NAME"].'?'.$p.'='.($page+1).'&'.$query.'">下一页</a>&nbsp;';
}
$goPage .= '<a href="'.$_SERVER["SCRIPT_NAME"].'?'.$p.'='.$pages.'&'.$query.'">末页</a>';
$goPage .= '&nbsp;到<input type="text" name="page_custom" size="3" onkeydown="if(event.keyCode==13) {window.location=\''.$_SERVER["SCRIPT_NAME"].'?'.$p.'=\'+this.value+\'&'.$query.'\'; return false;}" />页';
return $goPage;
}
/**
*方法:createSql( $table, $data, $action = 'insert', $parameters = '' )
*作用:生成标准sql语句(insert或update)
*输入:表$table, 数据$data $key=>字段名、$val=>值(注意值需要先转义,再传入函数), 默认插入$action = 'insert'或'update'  条件$parameters = ''
*输出:sql语句
*/ 
function createSql( $table, $data, $action = 'insert', $parameters = '' )
{
reset( $data );
if ( $action == 'insert' ) {
$query = 'insert into `' . $table . '` (';
$keystr = $valstr = '';
while ( list( $columns, $value ) = each( $data ) ) {
$keystr .= '`' . $columns . '`, ';
switch ( ( string )$value ) {
case 'now()':
$valstr .= 'now(), ';
break;
case 'null':
$valstr .= 'null, ';
break;
default:
$valstr .= '\'' . $value  . '\', ';
break;
}
}
$query .= substr( $keystr, 0, -2 ) . ') values (' . substr( $valstr, 0, -2 ) . ')';
} elseif ( $action == 'update' ) {
$query = 'update `' . $table . '` set ';
while ( list( $columns, $value ) = each( $data ) ) {
switch ( ( string )$value ) {
case 'now()':
$query .= '`' . $columns . '` = now(), ';
break;
case 'null':
$query .= '`' . $columns .= '` = null, ';
break;
default:
$query .= '`' . $columns . '` = \'' . $value  . '\', ';
break;
}
}
$query = substr( $query, 0, -2 ) . ' where ' . $parameters;
}
return $query ;
}
/******************************************
 *函数:selectSql($fields,$term,$table) 
 *作用:根据条件,从数据表中选择相关的字段,返回一个sql
 *输入:$table(数据表名), $fields(要选择的字段,如'`username`,`passwd`,`address`'), $sql_where(条件,如 username='andy' AND passwd='123'),
 *输出:sql语句
 */
function selectSql($table, $fields, $sql_where, $many=true) 
{
$sql = 'SELECT  '.$fields.' FROM `'.$table.'` WHERE 1';
$sql .= ' AND '.$sql_where.' ';
if(!$many)
{
$sql .= "LIMIT 1 ";
}
return $sql;
}
/******************************************
 *函数:deleteSql($table, $sql_where) 
 *作用:根据条件,从数据表中选择相关的字段,返回一个sql
 *输入:$table(数据表名),  $sql_where(条件,如 username='andy' AND passwd='123')
 *输出:sql语句
 */
function deleteSql($table, $sql_where) 
{
$sql = 'DELETE  FROM `'.$table.'` WHERE 1';
$sql .= ' AND '.$sql_where.' ';
return $sql;
}
/**
*插入一条数据
*返回插入行的 id 或者 true
* 2007-4-4 pangzunlian@sina.com
*/
function insert($table, $data)
{
$sql = $this->createSql($table, $data, 'insert');
$res = $this->db->query($sql);
return $res ? $this->db->getInsertId() : false;
}
/* 
* 执行sql的update操作
* $sql_where 是sql的where子句
* 返回 MySQL 最后操作影响的列数目
*/
function update($table, $data, $sql_where)
{
$sql = $this->createSql($table, $data, 'update', $sql_where);
$res = $this->db->query($sql);
return $res ? true : false;
}
/* 
* 执行sql的select操作
* $sql_where 是sql的where子句; $many=true表示获取多条记录,否则获取一条
* 返回 获取的数组,可能是二维数组或一维数组
*/
function select($table, $fields, $sql_where, $many=true)
{
$sql = $this->selectSql($table, $fields, $sql_where, $many);
if($many)
{
$res = $this->db->getAll($sql);
}
else
{
$res = $this->db->getRow($sql);
} 
return $res ? $res : false;
}
/* 
* 执行sql的delete操作
* $sql_where 是sql的where子句
* 返回 true 或 false
*/
function delete($table, $sql_where)
{
$sql = $this->deleteSql($table, $sql_where);
$res = $this->db->query($sql); 
return $res ? true : false;
}
/******************************************
 *函数:ifExist($table,$field,$value,$db)
 *作用:判断数据表中是否存在一条数据
 *输入:$table(数据表),$field(字段名),$value(数据),$db(连接库)
 *输出:true:false
 */
function ifExist($table, $field, $value)
{
$sql = "SELECT * FROM `".$table."` WHERE 1 ";
$sql .= "AND `".$field."` = '".$value."' ";
$res = $this->db->getAll($sql);
return (count($res)>0) ? true : false;
}
/******************************************
 *函数:delOne($ID,$table,$db)
 *作用:删除一条内容
 *输入:$ID,$table,$db
 *输出:true/false
 */
     function delOne($table, $field_name, $field_value)
{
$sql = "DELETE FROM `".$table."` WHERE 1 ";
$sql .= "AND `".$field_name."`='".$field_value."' ";
         $sql .= "LIMIT 1 ";
return ($this->db->query($sql)) ? true : false;
}
//递归获取各种分类
    //$tabel:分类表名, $max:每页多少条,$page:当前页码,$parent_id_field:父级id字段名, $sort_id_field:分类id字段名, $parent_id=0:父级id的值, $n=0:层级
    /*

   一个典型的递归的分页调用:

    //递归的分页
    $max = 2;
    $p = 'page';
    $page = isset ($_GET[$p]) ? $_GET[$p]  : '1' ;//当前是第几页?
    $sql_page = "SELECT COUNT(sort_id) as total FROM news_sort WHERE parent_id=0 ORDER BY sort_id ";
    $sorts = $Sql->listAllSorts('news_sort', $max, $page);
    $goPage = $Sql->goPageSorts($sql_page, $max, $page);
    $tpl->assign('sorts', $sorts);
    $tpl->assign('goPage', $goPage);    
    */
    function listAllSorts($table='sf_sort', $max, $page, $parent_id_field='parent_id', $sort_id_field='sort_id', $parent_id=0, $n=0)
    {
        $from = ($page-1)*$max;//从第几条数据开始取
    global $db;
    static $sorts = array();
    $n++;
    $sql = "SELECT * FROM {$table} WHERE `".$parent_id_field."`='{$parent_id}' ";
        if($n == 1)
        {
            $sql .= " LIMIT ".$from.",".$max." ";
        }        
    $res = $db->getAll($sql);
                
    if($res)
    {
    foreach($res as $key=>$val)
    {
    $res[$key]['space'] = $n;//层级        
    $res[$key]['spacer'] = str_repeat('&nbsp;&nbsp;&nbsp;', $n-1).'|—';//名称前面的内容(空格、|-等)       
    $sorts[] = $res[$key];
    $this->listAllSorts($table, $max, $page, $parent_id_field, $sort_id_field, $val[$sort_id_field], $n);
    }
    }
    return $sorts;    
    }
    //$sql:sql语句,$max:每页多少条,$page:当前页,$p是地址栏的页码字段名,$query是除$page之外的参数
function goPageSorts($sql, $max, $page, $p='page', $query='')
{
$res = $this->db->getRow($sql);
$total = $res['total'];
$pages = ceil($total/$max);//总共有多少页
if($pages == 0)
{
return '';
}
$page = $page>$pages ? $pages : $page;
$goPage = '第'.$page.'页/共'.$pages.'页 每页'.$max.'条 总数量'.$total;
$goPage .= '&nbsp;<a href="'.$_SERVER['SCRIPT_NAME'].'?'.$p.'=1&'.$query.'">首页</a> ';
if($page<>1)
{
$goPage .= '<a href="'.$_SERVER["SCRIPT_NAME"].'?'.$p.'='.($page-1).'&'.$query.'">上一页</a>&nbsp;';
}
if($page<>$pages)
{
$goPage .= '<a href="'.$_SERVER["SCRIPT_NAME"].'?'.$p.'='.($page+1).'&'.$query.'">下一页</a>&nbsp;';
}
$goPage .= '<a href="'.$_SERVER["SCRIPT_NAME"].'?'.$p.'='.$pages.'&'.$query.'">末页</a>';
$goPage .= '&nbsp;到<input type="text" name="page_custom" size="3" onkeydown="if(event.keyCode==13) {window.location=\''.$_SERVER["SCRIPT_NAME"].'?'.$p.'=\'+this.value+\'&'.$query.'\'; return false;}" />页';
return $goPage;
}
}

一个调用上面分页类的留言列表程序:

<?php
/*
 *  -------------------------------------------------
 *   @file : message_list2.php
*/
require_once 'xmphp/xmphp.php';//全站配置文件
require_once XMPHP.'/smarty.php';//smarty功能
require_once XMPHP.'/mysql.php';//mysql功能
$Sql = new Sql;//创建类的一个对象
$sql_list = "SELECT * FROM `message` WHERE 1 ";
$sql_page = "SELECT COUNT(`id`) as `total` FROM `message` WHERE 1 ";//COUNT是mysql的函数,计算某个字段的数量
$max = 5;//每页显示多少条数据
$page = (isset($_GET['page']) && intval($_GET['page'])>0) ? intval($_GET['page']) : 1;//第几页
$p = 'page';//页码变量名
if(isset($_GET['keyword']) && $_GET['keyword'] <>'') //如果有搜索的关键字时
{
$query = 'keyword='.$_GET['keyword'];
$sql_list .= "AND content LIKE '%".$_GET['keyword']."%' ";
$sql_page .= "AND content LIKE '%".$_GET['keyword']."%' ";
}
else
{
$query = '';
}
$sql_list .= "ORDER BY `id` DESC ";
$res = $Sql->listAll($sql_list, $max, $page);//得到一个二维数组
$goPage = $Sql->goPage($sql_page, $max, $page, $p, $query);//得到分页的html代码(字符串)
//echo '<pre>';
//print_r ($res);
//echo '</pre>';
//echo $goPage;
//赋值到页面中
$tpl->assign('res', $res);
$tpl->assign('goPage', $goPage);
//显示页面
$tpl->display('tpl/message_list2.html');//显示页面
?>

除非注明,文章均为史亚永原创,欢迎转载!转载请注明本文地址,谢谢。

本文地址:http://www.shiyayong.cn/post/Sql.class.php.html

评论列表:

3  Leniy  2013-4-11 8:16:39 回复该留言  IP:60.211.191.214
你这个语句自动换行是咋弄的?
  茶馆老板  2013-4-12 19:45:17 回复该留言  IP:117.79.232.190
这个是zblog的一个插件啊,你用的是什么啊?
  Leniy  2013-4-14 7:51:22 回复该留言  IP:60.211.191.214
Crayon
Leniy
  Leniy  2013-4-14 7:51:53 回复该留言  IP:60.211.191.214
wordpress的插件
  茶馆老板  2013-4-15 20:18:19 回复该留言  IP:118.26.250.202
那也行啊,wordpress的插件比zblog强大多了啊
茶馆老板
Leniy
茶馆老板
Leniy
2  sunhaiwei  2013-4-11 7:23:33 回复该留言  IP:210.22.136.170
小2 上茶
  茶馆老板  2013-4-12 19:43:56 回复该留言  IP:117.79.232.190
随便坐啊,哈哈
茶馆老板
sunhaiwei
1  简搜博客  2013-4-10 20:29:58 回复该留言  IP:114.113.125.65
偶来了,,支持下下
  茶馆老板  2013-4-12 19:43:00 回复该留言  IP:117.79.232.190
那以后常来支持哦,离不开大家的
茶馆老板
简搜博客

发表评论:

(设置个性头像)

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

无觅相关文章插件,快速提升流量