仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1375|回复: 20
打印 上一主题 下一主题

[学习教程] PHP网页编程之一个不错的MySQL类

[复制链接]
萌萌妈妈 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-2-3 23:32:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
工具程序用来显示 Rasmus Lerdorf 的个人履历,以及统计网页流量。        包括CRUD,事务,树递归查询,分页等. 演示复杂的魅力. 一切的参数都escape了,不存在注入成绩.
    /*
    * Anthony.chen
    * 2010 reserved
    */
    class DB {
    // Query types
    const SELECT = 1;
    const INSERT = 2;
    const UPDATE = 3;
    const DELETE = 4;
    const T = 't';
    const F = 'f';
    /*
    * Supporting return multiple data;
    */
    public static function insert_table($table_name,$data,$return_id='id',$db='default'){
    if (!is_array($data)){
    return false;
    }
    if (is_null($return_id)){
    self::query(self::SELECT,self::insert($table_name,array_keys($data))->values(array_values($data)))->execute($db);
    return true;
    }
    if (is_string($return_id)){
    $id = self::query(self::SELECT,self::insert($table_name,array_keys($data))->values(array_values($data))." returning ".$return_id)->execute($db)->get($return_id);
    return $id;
    }else{
    if (is_array($return_id)){
    $ids = implode(',',$return_id);
    $r_ids = self::query(self::SELECT,self::insert($table_name,array_keys($data))->values(array_values($data))." returning ".$ids)->execute($db)->current();
    return $r_ids;
    }
    }
    return false;
    }
    public static function update_table($table_name,$id,$data,$id_name='id',$db='default'){
    if (!is_array($data)){
    return false;
    }
    return self::update($table_name)->set($data)->where($id_name ,'=',$id)->execute($db);
    }
    public static function quote($s,$db='default'){
    if(!is_array($s)){
    return Database::instance($db)->quote($s);
    }else{ //Quote array and implode
    $_qs = array();
    foreach ($s as $ele){
    $_qs[] = self::quote($ele,$db);
    }
    $_quoteString = implode(',',$_qs);
    return $_quoteString;
    }
    }
    public static function escape($s,$db='default'){
    return Database::instance($db)->escape($s);
    }
    public static function quote_table($s,$db='default'){
    return Database::instance($db)->quote_table($s);
    }
    public static function getConnection($db = 'default'){
    return Database::instance($db)->getConnection();
    }
    public static function getChildren($table,$returnSql = false ,$pid= '0',$idname='id',$pidname='pid' ,$db='default'){
    $_sql = 'select * from '.$table.' where '.$pidname.'='.self::escape($pid,$db).
    " and $idname <>".DB::escape($pid,$db);
    if($returnSql){
    return $_sql;
    }
    $_res = self::query(self::SELECT,$_sql)->execute($db)->as_array();
    if($_res){
    return $_res;
    }else{
    return false;
    }
    }
    /*
    *
    */
    public static function getTree($tableName,$returnSql=false,$startWith='0',$idCol='id',$pidCol='pid', $orderCol='id', $maxDepth=0,$level = 0,$delimiter = ';',$db='default'){
    $_funcParas = array();
    $_funcParas[] = self::quote($tableName,$db); //TableView
    $_funcParas[] = self::quote($idCol,$db); //ID column
    $_funcParas[] = self::quote($pidCol,$db); //Parent ID Column
    $_funcParas[] = self::quote($orderCol,$db); //Default Order by ASC
    $_funcParas[] = self::quote($startWith,$db); //Begin NODE
    $_funcParas[] = self::quote($maxDepth,$db); //Begin Depth of traverse
    $_funcParas[] = self::quote($delimiter,$db); //Delimitor,default ';'
    $_sql = 'select * from connectby('
    .implode(',',$_funcParas).')'
    .' as t(id int, pid int, level int, branch text, pos int)';
    if($level > 0){
    $_sql .= ' where level >='.self::quote($level);
    }
    if($returnSql) return $_sql;
    $_res = self::query(self::SELECT,$_sql,true)->execute($db)->as_array();
    if($_res){
    return $_res;
    }else{
    return false;
    }
    }
    public static function begin($db='default'){
    DB::query(Database::UPDATE, "BEGIN")->execute($db);
    }
    public static function commit($db='default'){
    DB::query(Database::UPDATE, "COMMIT")->execute($db);
    }
    public static function rollback($db='default'){
    DB::query(Database::UPDATE, "ROLLBACK")->execute($db);
    }
    /**
    * Create a new [Database_Query] of the given type.
    *
    * // Create a new SELECT query
    * $query = DB::query(Database::SELECT, 'SELECT * FROM users');
    *
    * // Create a new DELETE query
    * $query = DB::query(Database::DELETE, 'DELETE FROM users WHERE id = 5');
    *
    * Specifying the type changes the returned result. When using
    * `Database::SELECT`, a [Database_Query_Result] will be returned.
    * `Database::INSERT` queries will return the insert id and number of rows.
    * For all other queries, the number of affected rows is returned.
    *
    * @param integer type: Database::SELECT, Database::UPDATE, etc
    * @param string SQL statement
    * @return Database_Query
    */
    public static function query($type, $sql,$as_object = false)
    {
    return new Database_Query($type, $sql,$as_object);
    }
    /**
    * Create a new [Database_Query_Builder_Select]. Each argument will be
    * treated as a column. To generate a `foo AS bar` alias, use an array.
    *
    * // SELECT id, username
    * $query = DB::select('id', 'username');
    *
    * // SELECT id AS user_id
    * $query = DB::select(array('id', 'user_id'));
    *
    * @param mixed column name or array($column, $alias) or object
    * @param ...
    * @return Database_Query_Builder_Select
    */
    public static function select($columns = NULL)
    {
    return new Database_Query_Builder_Select(func_get_args());
    }
    /**
    * Create a new [Database_Query_Builder_Select] from an array of columns.
    *
    * // SELECT id, username
    * $query = DB::select_array(array('id', 'username'));
    *
    * @param array columns to select
    * @return Database_Query_Builder_Select
    */
    public static function select_array(array $columns = NULL)
    {
    return new Database_Query_Builder_Select($columns);
    }
    /**
    * Create a new [Database_Query_Builder_Insert].
    *
    * // INSERT INTO users (id, username)
    * $query = DB::insert('users', array('id', 'username'));
    *
    * @param string table to insert into
    * @param array list of column names or array($column, $alias) or object
    * @return Database_Query_Builder_Insert
    */
    public static function insert($table = NULL, array $columns = NULL)
    {
    return new Database_Query_Builder_Insert($table, $columns);
    }
    /**
    * Create a new [Database_Query_Builder_Update].
    *
    * // UPDATE users
    * $query = DB::update('users');
    *
    * @param string table to update
    * @return Database_Query_Builder_Update
    */
    public static function update($table = NULL)
    {
    return new Database_Query_Builder_Update($table);
    }
    /**
    * Create a new [Database_Query_Builder_Delete].
    *
    * // DELETE FROM users
    * $query = DB::delete('users');
    *
    * @param string table to delete from
    * @return Database_Query_Builder_Delete
    */
    public static function delete($table = NULL)
    {
    return new Database_Query_Builder_Delete($table);
    }
    /**
    * Create a new [Database_Expression] which is not escaped. An expression
    * is the only way to use SQL functions within query builders.
    *
    * $expression = DB::expr('COUNT(users.id)');
    *
    * @param string expression
    * @return Database_Expression
    */
    public static function expr($string){
    return new Database_Expression($string);
    }
    /*
    * Gettting paginated page
    */
    public static function getPage($_sql,&$page,$orderBy ='updated desc', $dataPro='data',$pagePro = 'pagination',
    $config = NULL,$db = 'default',$as_object= true){
    $_csql = 'select count(1) as c from ('.$_sql.') st';
    $_c = DB::query(DB::SELECT,$_csql)->execute($db)->get('c');
    if($config){
    $config['total_items'] = $_c;
    $_pagination = new Pagination($config);
    }else{
    $config = array();
    $config['total_items'] = $_c;
    $_pagination = new Pagination($config);
    }
    $_sql .= ' order by '.$orderBy;
    if($_pagination->offset){
    $_sql .= ' offset '.$_pagination->offset;
    }
    $_sql .= ' limit '.$_pagination->items_per_page;
    $_data = DB::query(DB::SELECT,$_sql,$as_object)->execute($db)->as_array();
    if(!$_data){
    $page->{$dataPro} = false;
    $page->{$pagePro} = false;
    return false;
    }
    $page->{$dataPro} = $_data;
    $page->{$pagePro} = $_pagination;
    return true;
    }
    /*
    * Get All roles
    * level to control the statrt
    */
    public static function getRoleTreeSql($role_id,$quote = false,$role_table,$level=0,$db='default'){
    $_sql = 'select id from ('.self::getTree($role_table,true,$role_id,'id','pid','id',
    0, //Maxdepth
    $level, //Level
    ';',$db).') utree';
    if(!$quote) return $_sql;
    else return '('.$_sql.')';
    }
    /*
    * Return sub query on Objects authorization
    * Child role objects and owned objects
    * Parent control
    */
    public static function getCURTreeSql($role_id,$user_id,$role_table,$quote = true,
    $role='role_id',$owner = 'owner_id' ,$db='default'){
    $_sql = ' '.$role.' in '.self::getRoleTreeSql($role_id,true,$role_table,
    1, //Level start with 1
    $db). ' or '.$owner.'='.DB::quote($user_id);
    if(!$quote) return $_sql;
    else return '('.$_sql.')';
    }
    }
不过语法好学,但是怎么用语法来实现每个人都有每个人的方式,几乎是各有千秋。然而借鉴别人成功的代码,绝对是有益无害,因此,多看那些经过千锤百炼凝出来的经典代码,是进阶的最好方法。
沙发
发表于 2015-2-4 01:37:10 | 只看该作者
我学习了一段时间后,我发现效果并不好(估计是我自身的问题)。因为一个人的精力总是有限的,同时学习这么多,会导致每个的学习时间都得不到保证。
灵魂腐蚀 该用户已被删除
板凳
发表于 2015-2-5 04:20:55 | 只看该作者
小鸟是第一次发帖(我习惯潜水的(*^__^*) 嘻嘻……),有错误之处还请大家批评指正,另外,前些日子听人说有高手能用php写驱动程序,真是学无止境,人外有人,天外有天。
透明 该用户已被删除
地板
发表于 2015-2-6 07:38:58 | 只看该作者
装在C盘下面可以利用windows的ghost功能可以还原回来(顺便当做是重转啦),当然啦我的编译目录要放在别的盘下,不然自己的劳动成果就悲剧啦。
莫相离 该用户已被删除
5#
发表于 2015-2-15 16:58:47 | 只看该作者
因为blog这样的可以让你接触更多要学的知识,可以接触用到类,模板,js ,ajax
兰色精灵 该用户已被删除
6#
发表于 2015-2-24 02:09:39 | 只看该作者
开发工具也会慢慢的更专业,每个公司的可能不一样,但是zend studio是个大伙都会用的。
变相怪杰 该用户已被删除
7#
发表于 2015-3-6 02:11:11 | 只看该作者
刚开始安装php的时候,我图了个省事,把php的扩展全都打开啦(就是把php.ini 那一片 extension 前面的冒号全去掉啦),这样自然有好处,以后不用再需要什么功能再来打开。
冷月葬花魂 该用户已被删除
8#
发表于 2015-3-8 09:30:47 | 只看该作者
遇到出错的时候,我经常把错误信息直接复制到 google的搜索栏,一般情况都是能搜到结果的,不过有时候会搜出来一大片英文的出来,这时候就得过滤一下,吧中文的弄出来,挨着式方法。
飘灵儿 该用户已被删除
9#
发表于 2015-3-11 00:17:25 | 只看该作者
先学习php和mysql,还有css(html语言很简单)我认为现在的效果比以前的方法好。
小魔女 该用户已被删除
10#
发表于 2015-3-12 20:52:41 | 只看该作者
最后介绍一个代码出错,但是老找不到错误方法,就是 go to wc (囧),出去换换气没准回来就找到错误啦。
小女巫 该用户已被删除
11#
发表于 2015-3-16 23:43:46 | 只看该作者
先学习php和mysql,还有css(html语言很简单)我认为现在的效果比以前的方法好。
若天明 该用户已被删除
12#
发表于 2015-3-23 06:49:27 | 只看该作者
刚开始安装php的时候,我图了个省事,把php的扩展全都打开啦(就是把php.ini 那一片 extension 前面的冒号全去掉啦),这样自然有好处,以后不用再需要什么功能再来打开。
金色的骷髅 该用户已被删除
13#
发表于 2015-3-23 23:24:29 | 只看该作者
使用 jquery 等js框架的时候,要随时注意浏览器的更新情况,不然很容易发生框架不能使用。
深爱那片海 该用户已被删除
14#
发表于 2015-3-28 12:29:30 | 只看该作者
最后介绍一个代码出错,但是老找不到错误方法,就是 go to wc (囧),出去换换气没准回来就找到错误啦。
不帅 该用户已被删除
15#
发表于 2015-3-30 23:34:10 | 只看该作者
其实没啥难的,多练习,练习写程序,真正的实践比看100遍都有用。不过要熟悉引擎
小妖女 该用户已被删除
16#
发表于 2015-4-1 15:11:11 | 只看该作者
当留言板完成的时候,下步可以把做1个单人的blog程序,做为目标,
蒙在股里 该用户已被删除
17#
发表于 2015-4-2 01:08:55 | 只看该作者
说点我烦的低级错误吧,曾经有次插入mysql的时间 弄了300年结果老报错,其实mysql的时间是有限制的,大概是到203X年  具体的记不清啦,囧。
乐观 该用户已被删除
18#
发表于 2015-4-4 15:54:29 | 只看该作者
首先我是坚决反对新手上来就用框架的,因为对底层的东西一点都不了解,造成知识上的真空,会对以后的发展不利。我的观点上手了解下框架就好,代码还是手写。当然啦如果是位别的编程语言的高手的话,这个就另当别论啦。
飘飘悠悠 该用户已被删除
19#
发表于 2015-4-5 04:14:24 | 只看该作者
多看优秀程序员编写的代码,仔细理解他们解决问题的方法,对自身有很大的帮助。
愤怒的大鸟 该用户已被删除
20#
发表于 2015-4-11 08:10:08 | 只看该作者
说php的话,首先得提一下数组,开始的时候我是最烦数组的,总是被弄的晕头转向,不过后来呢,我觉得数组里php里最强大的存储方法,所以建议新手们要学好数组。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-23 01:26

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表