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集成FCK的函数代码
Sep 27 PHP
php开发文档 会员收费1期
Aug 14 PHP
ThinkPHP页面跳转success与error方法概述
Jun 25 PHP
php header函数的常用http头设置
Jun 25 PHP
PHP下载生成的csv文件及问题总结
Aug 06 PHP
详解WordPress中给链接添加查询字符串的方法
Dec 18 PHP
PHP中strpos、strstr和stripos、stristr函数分析
Jun 11 PHP
简单谈谈PHP中的Reload操作
Dec 12 PHP
浅谈PHP中的面向对象OOP中的魔术方法
Jun 12 PHP
[原创]PHP获取数组表示的路径方法分析【数组转字符串】
Sep 01 PHP
针对thinkPHP5框架存储过程bug重写的存储过程扩展类完整实例
Jun 16 PHP
基于PHP实现用户登录注册功能的详细教程
Aug 04 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 ftp文件上传函数(基础版)
2010/06/03 PHP
解析htaccess伪静态的规则
2013/06/18 PHP
php检查页面是否被百度收录
2015/10/28 PHP
关于ThinkPhp 框架表单验证及ajax验证问题
2017/07/19 PHP
JS 文件传参及处理技巧分析
2010/05/13 Javascript
jquery tab插件制作实现代码
2010/06/22 Javascript
JS字符串截取函数实例
2013/12/27 Javascript
Javascript日期格式化format函数的使用方法
2016/08/30 Javascript
jQuery实现遮罩层登录对话框
2016/12/29 Javascript
jQuery EasyUI Draggable拖动组件
2017/03/01 Javascript
jQuery实现页面倒计时并刷新效果
2017/03/13 Javascript
原生JS改变透明度实现轮播效果
2017/03/24 Javascript
js实现图片上传预览原理分析
2017/07/13 Javascript
Vue2 SSR渲染根据不同页面修改 meta
2017/11/20 Javascript
在vue中读取本地Json文件的方法
2018/09/06 Javascript
vue实现搜索功能
2019/05/28 Javascript
JQuery事件委托(适用于给动态生成的脚本元素添加事件)
2020/02/01 jQuery
jQuery中getJSON跨域原理的深入讲解
2020/09/02 jQuery
JS数组索引检测中的数据类型问题详解
2021/01/11 Javascript
python使用PyGame模块播放声音的方法
2015/05/20 Python
Python 实现使用dict 创建二维数据、DataFrame
2018/04/13 Python
python 实现检验33品种数据是否是正态分布
2019/12/09 Python
python 解决cv2绘制中文乱码问题
2019/12/23 Python
python opencv实现信用卡的数字识别
2020/01/12 Python
canvas烟花特效锦集
2018/01/17 HTML / CSS
阿迪达斯印度官方商城:adidas India
2017/03/26 全球购物
中科创达面试题
2016/12/28 面试题
《阳光》教学反思
2014/02/23 职场文书
广告宣传策划方案
2014/05/21 职场文书
碧霞祠导游词
2015/02/09 职场文书
办公室个人总结
2015/02/28 职场文书
师德师风主题教育活动总结
2015/05/07 职场文书
2015年审计人员工作总结
2015/05/26 职场文书
电台广播稿范文
2015/08/19 职场文书
python基于tkinter制作无损音乐下载工具
2021/03/29 Python
golang语言指针操作
2022/04/14 Golang