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 相关文章推荐
Zend Studio for Eclipse的java.lang.NullPointerException错误的解决方法
Dec 06 PHP
PHP定时自动生成静态HTML的实现代码
Jun 20 PHP
比较时间段一与时间段二是否有交集的php函数
May 31 PHP
PHP flock 文件锁详细介绍
Dec 29 PHP
str_replace只替换一次字符串的方法
Apr 09 PHP
浅析PHP页面局部刷新功能的实现小结
Jun 21 PHP
基于php中使用excel的简单介绍
Aug 02 PHP
php 实现进制相互转换
Apr 07 PHP
thinkphp在低版本Nginx 下支持PATHINFO的方法分享
May 27 PHP
PHP设计模式之注册树模式分析
Jan 26 PHP
php写入txt乱码的解决方法
Sep 17 PHP
php7 错误处理机制修改实例分析
May 25 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
javascript+php实现根据用户时区显示当地时间的方法
2015/03/11 PHP
php实现过滤UBB代码的类
2015/03/12 PHP
php实现简单的上传进度条
2015/11/17 PHP
yii2带搜索功能的下拉框实例详解
2016/05/12 PHP
php mysql 封装类实例代码
2016/09/18 PHP
PHP获取MySQL执行sql语句的查询时间方法
2018/08/21 PHP
PHP预定义接口――Iterator用法示例
2020/06/05 PHP
取消选中单选框radio的三种方式示例介绍
2013/12/23 Javascript
jQuery获取节点和子节点文本的方法
2014/07/22 Javascript
jQuery实现页面内锚点平滑跳转特效的方法总结
2015/05/11 Javascript
Node.js重新刷新session过期时间的方法
2016/02/04 Javascript
bootstrap table复杂操作代码
2016/11/01 Javascript
jQuery展示表格点击变色、全选、删除
2017/01/05 Javascript
React-router v4 路由配置方法小结
2017/08/08 Javascript
jqueryUI tab标签页代码分享
2017/10/09 jQuery
Vue3.0中的monorepo管理模式的实现
2019/10/14 Javascript
vue 监听窗口变化对页面部分元素重新渲染操作
2020/07/28 Javascript
编写v-for循环的技巧汇总
2020/12/01 Javascript
使用Python的Django框架实现事务交易管理的教程
2015/04/20 Python
简析Python的闭包和装饰器
2016/02/26 Python
实例探究Python以并发方式编写高性能端口扫描器的方法
2016/06/14 Python
使用Python+Splinter自动刷新抢12306火车票
2018/01/03 Python
Python操作qml对象过程详解
2019/09/26 Python
PYQT5 vscode联合操作qtdesigner的方法
2020/03/24 Python
python读取excel进行遍历/xlrd模块操作
2020/07/12 Python
OpenCV读取与写入图片的实现
2020/10/13 Python
优质美利奴羊毛袜,不只是徒步旅行:Darn Tough Vermont
2018/11/05 全球购物
SIDESTEP荷兰:在线购买鞋子
2019/11/18 全球购物
三个Unix的命令面试题
2015/04/12 面试题
安全检查验收制度
2014/01/12 职场文书
考试不及格的检讨书
2014/01/22 职场文书
真诚的求职信
2014/07/04 职场文书
学校做一个有道德的人活动方案
2014/08/23 职场文书
2014年班级工作总结范文
2014/12/23 职场文书
护理专业自荐信范文
2015/03/06 职场文书
公司岗位说明书
2015/10/08 职场文书