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基础知识:函数基础知识
Dec 13 PHP
php 文件上传系统手记
Oct 26 PHP
PHP 配置open_basedir 让各虚拟站点独立运行
Nov 12 PHP
php设计模式之单例、多例设计模式的应用分析
Jun 30 PHP
PHP使用imagick读取PDF生成png缩略图的两种方法
Mar 20 PHP
PHP下的Oracle客户端扩展(OCI8)安装教程
Sep 10 PHP
PHP利用hash冲突漏洞进行DDoS攻击的方法分析
Mar 26 PHP
Yii使用migrate命令执行sql语句的方法
Mar 15 PHP
PHP单例模式是什么 php实现单例模式的方法
May 14 PHP
PHPExcel在linux环境下导出报500错误的解决方法
Jan 26 PHP
thinkphp5.0自定义验证规则使用方法
Nov 16 PHP
关于php unset对json_encode的影响详解
Nov 14 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来自动调用不同服务器上的flash
2006/10/09 PHP
php合并数组array_merge函数运算符加号与的区别
2008/10/31 PHP
YII CLinkPager分页类扩展增加显示共多少页
2016/01/29 PHP
PHP预定义变量9大超全局数组用法详解
2016/04/23 PHP
php 比较获取两个数组相同和不同元素的例子(交集和差集)
2019/10/18 PHP
php实现JWT验证的实例教程
2020/11/26 PHP
使用jQuery快速解决input中placeholder值在ie中无法支持的问题
2014/01/02 Javascript
纯js写的分页表格数据为json串
2014/02/18 Javascript
Windows8下搭建Node.js开发环境教程
2014/09/03 Javascript
jquery向上向下取整适合分页查询
2014/09/06 Javascript
简介JavaScript中的getSeconds()方法的使用
2015/06/10 Javascript
使用AngularJS制作一个简单的RSS阅读器的教程
2015/06/18 Javascript
用js编写的简单的计算器代码程序
2015/08/04 Javascript
ECharts仪表盘实例代码(附源码下载)
2016/02/18 Javascript
基于jQuery日历插件制作日历
2016/03/11 Javascript
jQuery实现鼠标跟随提示层效果代码(可显示文本,Div,Table,Html等)
2016/04/18 Javascript
JS学习之表格的排序简单实例
2016/05/16 Javascript
jQuery之简单的表单验证实例
2016/07/07 Javascript
AngularJS基础 ng-hide 指令用法及示例代码
2016/08/01 Javascript
Bootstrap导航条的使用和理解3
2016/12/14 Javascript
原生的强大DOM选择器querySelector介绍
2016/12/21 Javascript
Ajax获取node服务器数据的完整步骤
2020/09/20 Javascript
Python将阿拉伯数字转换为罗马数字的方法
2015/07/10 Python
Python正则获取、过滤或者替换HTML标签的方法
2016/01/28 Python
Python断言assert的用法代码解析
2018/02/03 Python
Python实现定时精度可调节的定时器
2018/04/15 Python
kafka监控获取指定topic的消息总量示例
2019/12/23 Python
解决Python 写文件报错TypeError的问题
2020/10/23 Python
python中append函数用法讲解
2020/12/11 Python
Cynthia Rowley官网:全球领先的生活方式品牌
2020/10/27 全球购物
怎样自定义一个异常类
2016/09/27 面试题
党员自我批评与反省材料
2014/02/10 职场文书
学习型党组织建设经验材料
2014/05/26 职场文书
检讨书格式范文
2015/05/07 职场文书
详解MySQL主从复制及读写分离
2021/05/07 MySQL
Spring Cloud 中@FeignClient注解中的contextId属性详解
2021/09/25 Java/Android