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 观察者模式的实现代码
May 10 PHP
php使用websocket示例详解
Mar 12 PHP
PHP中is_dir()函数使用指南
May 08 PHP
typecho插件编写教程(一):Hello World
May 28 PHP
php简单判断两个字符串是否相等的方法
Jul 13 PHP
CI(Codeigniter)的Setting增强配置类实例
Jan 06 PHP
SSO单点登录的PHP实现方法(Laravel框架)
Mar 23 PHP
php实现连接access数据库并转txt写入的方法
Feb 08 PHP
[原创]php实现数组按拼音顺序排序的方法
May 03 PHP
thinkphp5 migrate数据库迁移工具
Feb 20 PHP
PHP内部实现打乱字符串顺序函数str_shuffle的方法
Feb 14 PHP
浅谈laravel框架sql中groupBy之后排序的问题
Oct 17 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 curl请求信息和返回信息设置代码实例
2015/04/27 PHP
Linux下源码包安装Swoole及基本使用操作图文详解
2019/04/02 PHP
获取HTML DOM节点元素的方法的总结
2009/08/21 Javascript
用Javascript实现Sleep暂停功能代码
2010/09/03 Javascript
js+css使DIV始终居于屏幕中间 左下 左上 右上 右下的代码集合
2011/03/10 Javascript
动态的改变IFrame的高度实现IFrame自动伸展适应高度
2012/12/28 Javascript
子页向父页传值示例
2013/11/27 Javascript
jQuery简单几行代码实现tab切换
2015/03/10 Javascript
基于javascript如何传递特殊字符
2015/11/30 Javascript
AngularJS表单和输入验证实例
2016/11/02 Javascript
Bootstrap 模态框(Modal)带参数传值实例
2017/08/20 Javascript
JS基于正则表达式实现的密码强度验证功能示例
2017/09/21 Javascript
JS返回顶部实例代码
2020/08/09 Javascript
值得收藏的八个常用的js正则表达式
2018/10/19 Javascript
vue使用axios上传文件(FormData)的方法
2019/04/14 Javascript
小程序最新获取用户昵称和头像的方法总结
2019/09/23 Javascript
解决vue addRoutes不生效问题
2020/08/04 Javascript
Python2.5/2.6实用教程 入门基础篇
2009/11/29 Python
python3编码问题汇总
2016/09/06 Python
python读取txt文件,去掉空格计算每行长度的方法
2018/12/20 Python
在pycharm中设置显示行数的方法
2019/01/16 Python
Python微医挂号网医生数据抓取
2019/01/24 Python
python实现简单日期工具类
2019/04/24 Python
python求最大值,不使用内置函数的实现方法
2019/07/09 Python
django 邮件发送模块smtp使用详解
2019/07/22 Python
python性能测量工具cProfile使用解析
2019/09/26 Python
Python使用selenium + headless chrome获取网页内容的方法示例
2019/10/16 Python
使用python检查yaml配置文件是否符合要求
2020/04/09 Python
Pyside2中嵌入Matplotlib的绘图的实现
2021/02/22 Python
美国克罗格超市在线购物:Kroger
2019/06/21 全球购物
DOM和JQuery对象有什么区别
2016/11/11 面试题
创业大赛策划书
2014/03/01 职场文书
能源工程专业应届生求职信
2014/03/01 职场文书
社会调查研究计划书
2014/05/01 职场文书
酒店优秀员工事迹材料
2014/06/02 职场文书
2014年感恩节活动策划方案
2014/10/06 职场文书