PHP中使用匿名函数操作数据库的例子


Posted in PHP onNovember 17, 2014
Base dao class illustrating the usefulness of closures.

* Handles opening and closing of connections.

* Adds slashes sql

* Type checking of sql parameters and casts as appropriate

* Provides hook for processing of result set and emitting one or more objects.

* Provides hook for accessing underlying link and result objects.
<?php
define("userName","root");

define("password","root");

define("dbName","ahcdb");

define("hostName","localhost");
class BaseDao {
    function getConnection()    {

        $link = mysql_connect(hostName, userName, password);

        if (!$link) 

            die("Could not connect: " . mysql_error());

        if (!mysql_select_db(dbName))

            die("Could not select database: " . mysql_error());

        return $link;

    }

    

    function setParams(& $sql, $params)    {

        if($params != null)

            $sql = vsprintf($sql, array_map(function($n) {

                if(is_int($n))

                    return (int)$n;

                if(is_float($n))

                    return (float)$n;

                if(is_string($n))

                    return "'".mysql_real_escape_string($n)."'";

                return mysql_real_escape_string($n);

            }, $params));

    }
    function executeQuery($sql, $params, $callback = null)    {

        $link  = $this->getConnection();

        $this->setParams($sql, $params);

        $return = null;

        if(($result = mysql_query($sql, $link)) != null)

            if($callback != null)

                $return = $callback($result, $link);

        if($link != null)

            mysql_close($link);

        if(!$result)

            die("Fatal Error: Invalid query '$sql' : " . mysql_error());

        return $return;

    }

 

    function getList($sql, $params, $callback)    {

        return $this->executeQuery($sql, $params, function($result, $link) use ($callback) {

            $idx = 0;

            $list = array();

            while ($row = mysql_fetch_assoc($result))

                if($callback != null)

                    $list[$idx] = $callback($idx++, $row);

            return $list;

        });

    }

    

    function getSingle($sql, $params, $callback)    {

        return $this->executeQuery($sql, $params, function($result, $link) use ($callback) {

            if ($row = mysql_fetch_assoc($result))

                $obj = $callback($row);

            return $obj;

        });

    }

}
class Example    {

    var $id;

    var $name;

    

    function Example($id, $name){

        $this->id = $id;

        $this->name = $name;

    }

    

    function setId($id){

        $this->id = $id;

    }

}
class ExampleDao extends BaseDao    {

    

    

    function getAll(){

        return parent::getList("select * from nodes", null, function($idx, $row) {

            return new Example($row["id"], $row["name"]);

        });

    }

    

    function load($id){

        return parent::getSingle("select * from nodes where id = %1\$s", array($id), function($row) {

            return new Example($row["id"], $row["name"]);

        });

    }

    

    function update($example){

        return parent::executeQuery("update nodes set name = '' where  id = -1", null, function($result, $link){

            return $result;

        });

    }

    

    function insert(& $example){

        return parent::executeQuery("insert into nodes", null, function($result, $link) use ($example){

            $id = mysql_insert_id($link);

            $example->setId($id);

            return $result;

        });

    }    

}
$exampleDao = new ExampleDao();
$list = $exampleDao->getAll());
$exampleObject = $exampleDao->load(1));
$exampleDao->update($exampleObject);
?>
PHP 相关文章推荐
在PHP中执行系统外部命令
Oct 09 PHP
php读取数据库信息的几种方法
May 24 PHP
PHP中数组合并的两种方法及区别介绍
Sep 14 PHP
探讨:parse url解析URL,返回其组成部分
Jun 14 PHP
解析PHP SPL标准库的用法(遍历目录,查找固定条件的文件)
Jun 18 PHP
php调用Google translate_tts api实现代码
Aug 07 PHP
CodeIgniter框架过滤HTML危险代码
Jun 12 PHP
php删除左端与右端空格的方法
Nov 29 PHP
PHP抓取网页、解析HTML常用的方法总结
Jul 01 PHP
PHP微信红包API接口
Dec 05 PHP
php接口技术实例详解
Dec 07 PHP
yii2-GridView在开发中常用的功能及技巧总结
Jan 07 PHP
PHP中定义数组常量(array常量)的方法
Nov 17 #PHP
php中addslashes函数与sql防注入
Nov 17 #PHP
php数组排序usort、uksort与sort函数用法
Nov 17 #PHP
php中current、next与reset函数用法实例
Nov 17 #PHP
使用PHP把HTML生成PDF文件的几个开源项目介绍
Nov 17 #PHP
php检测数组长度函数sizeof与count用法
Nov 17 #PHP
php中filter_input函数用法分析
Nov 15 #PHP
You might like
英雄试炼之肉山谷—引领RPG新潮流
2020/04/20 DOTA
php压缩多个CSS为一个css的代码并缓存
2011/04/21 PHP
php设计模式 Builder(建造者模式)
2011/06/26 PHP
分享8个最佳的代码片段在线测试网站
2013/06/29 PHP
php生成EAN_13标准条形码实例
2013/11/13 PHP
非常全面的php日期时间运算汇总
2015/11/04 PHP
脚本之家贴图转换+转贴工具用到的js代码超级推荐
2007/04/05 Javascript
很可爱的输入框
2008/08/03 Javascript
js查错流程归纳
2012/05/04 Javascript
防止登录页面出现在frame中js代码
2014/07/22 Javascript
JavaScript操作XML/HTML比较常用的对象属性集锦
2015/10/30 Javascript
jQuery中队列queue()函数的实例教程
2016/05/03 Javascript
Jquery Easyui进度条组件Progress使用详解(8)
2020/03/26 Javascript
JS实现的文件拖拽上传功能示例
2018/05/21 Javascript
axios简单实现小程序延时loading指示
2018/07/30 Javascript
使用 UniApp 实现小程序的微信登录功能
2020/06/09 Javascript
javascript canvas封装动态时钟
2020/09/30 Javascript
[06:53]2018DOTA2国际邀请赛寻真——为复仇而来的Newbee
2018/08/15 DOTA
[36:33]完美世界DOTA2联赛PWL S2 LBZS vs Forest 第二场 11.29
2020/12/02 DOTA
Python中使用动态变量名的方法
2014/05/06 Python
使用python实现数组、链表、队列、栈的方法
2019/12/20 Python
python opencv进行图像拼接
2020/03/27 Python
优质美利奴羊毛袜,不只是徒步旅行:Darn Tough Vermont
2018/11/05 全球购物
Lookfantastic俄罗斯:欧洲在线化妆品零售商
2019/08/06 全球购物
Bath & Body Works阿联酋:在线购买沐浴和身体用品
2021/02/27 全球购物
.NET初级开发工程师面试题(包括Javascript)
2012/08/22 面试题
厂长助理岗位职责
2013/12/27 职场文书
大学总结自我鉴定
2014/01/18 职场文书
运动会广播稿50字
2014/01/26 职场文书
高一数学教学反思
2014/02/07 职场文书
专科生就业求职信
2014/06/22 职场文书
四风自我剖析材料
2014/09/30 职场文书
2014年底工作总结
2014/12/15 职场文书
2015年反洗钱工作总结
2015/04/25 职场文书
归途列车观后感
2015/06/17 职场文书
了解Kubernetes中的Service和Endpoint
2022/04/01 Servers