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 相关文章推荐
PHP4之真OO
Oct 09 PHP
几款免费开源的不用数据库的php的cms
Dec 19 PHP
php使HTML标签自动补全闭合函数代码
Oct 04 PHP
解析PHP处理换行符的问题 \r\n
Jun 13 PHP
php selectradio和checkbox默认选择的实现方法详解
Jun 29 PHP
PHP导入导出Excel代码
Jul 07 PHP
php判断linux下程序问题实例
Jul 09 PHP
PHP加密解密函数详解
Oct 28 PHP
PHP使用curl制作简易百度搜索
Nov 03 PHP
用Laravel Sms实现laravel短信验证码的发送的实现
Nov 29 PHP
ThinkPHP3.2.3框架Memcache缓存使用方法实例总结
Apr 15 PHP
使用PHP+Redis实现延迟任务,实现自动取消订单功能
Nov 21 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
php编写一个简单的路由类
2011/04/13 PHP
php 文本文件的读取效率
2012/02/10 PHP
php实现统计邮件大小的方法
2013/08/06 PHP
PHP生成随机字符串(3种方法)
2015/09/25 PHP
thinkphp jquery实现图片上传和预览效果
2020/07/22 PHP
php实现解析xml并生成sql语句的方法
2018/02/03 PHP
微信JSSDK分享功能图文实例详解
2019/04/08 PHP
php字符串过滤strip_tags()函数用法实例分析
2019/06/24 PHP
javascript 拖放效果实现代码
2010/01/22 Javascript
jquery中checkbox全选失效的解决方法
2014/12/26 Javascript
jQuery实现从身份证号中获取出生日期和性别的方法分析
2016/02/25 Javascript
js仿支付宝填写支付密码效果实现多方框输入密码
2016/03/09 Javascript
详解js的六大数据类型
2016/12/27 Javascript
COM组件中调用JavaScript函数详解及实例
2017/02/23 Javascript
vue自定义过滤器创建和使用方法详解
2017/11/06 Javascript
vue-cli与webpack处理静态资源的方法及webpack打包的坑
2018/05/15 Javascript
Angular ui-roter 和AngularJS 通过 ocLazyLoad 实现动态(懒)加载模块和依赖
2018/11/25 Javascript
详解js根据百度地图提供经纬度计算两点距离
2019/05/13 Javascript
vue3+typescript实现图片懒加载插件
2020/10/26 Javascript
pandas 实现将重复表格去重,并重新转换为表格的方法
2018/04/18 Python
python进阶之多线程对同一个全局变量的处理方法
2018/11/09 Python
Python除法之传统除法、Floor除法及真除法实例详解
2019/05/23 Python
Python使用scrapy爬取阳光热线问政平台过程解析
2019/08/14 Python
python实现复制文件到指定目录
2019/10/16 Python
解决Python中回文数和质数的问题
2019/11/24 Python
Python中断多重循环的几种方式详解
2020/02/10 Python
详解如何解决canvas图片getImageData,toDataURL跨域问题
2018/09/17 HTML / CSS
巴西最大的家电和百货零售商:Casas Bahia
2016/11/22 全球购物
菲律宾旅游网站:Expedia菲律宾
2017/10/11 全球购物
美国婚礼装饰和活动用品批发供应商:Event Decor Direct
2018/10/12 全球购物
师范生自我鉴定
2014/03/20 职场文书
新闻工作者先进事迹
2014/05/26 职场文书
企业党的群众路线教育实践活动学习心得体会
2014/10/31 职场文书
继续教育心得体会(共6篇)
2016/01/19 职场文书
JPA如何使用entityManager执行SQL并指定返回类型
2021/06/15 Java/Android
python小型的音频操作库mp3Play
2022/04/24 Python