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 相关文章推荐
如何使用脚本模仿登陆过程
Nov 22 PHP
探讨:如何使用PHP实现计算两个日期间隔的年、月、周、日数
Jun 13 PHP
php输出xml必须header的解决方法
Oct 17 PHP
PHP callback函数使用方法和注意事项
Jan 23 PHP
php+mysqli使用预处理技术进行数据库查询的方法
Jan 28 PHP
php按单词截取字符串的方法
Apr 07 PHP
PHP判断字符串长度的两种方法很实用
Sep 22 PHP
php 使用redis锁限制并发访问类示例
Nov 02 PHP
phpcms的分类名称和类别名称的调用
Jan 05 PHP
php7 安装yar 生成docker镜像
May 09 PHP
PHP实现的文件浏览器功能简单示例
Sep 12 PHP
详解Laravel设置多态关系模型别名的方式
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
解决File size limit exceeded 错误的方法
2013/06/14 PHP
PHP实例分享判断客户端是否使用代理服务器及其匿名级别
2014/06/04 PHP
PHP使用file_get_content设置头信息的方法
2016/02/14 PHP
PHP读取大文件的多种方法介绍
2016/04/04 PHP
php文件系统处理方法小结
2016/05/23 PHP
php layui实现前端多图上传实例
2019/07/30 PHP
Yii使用EasyWechat实现小程序获取用户的openID的方法
2020/04/29 PHP
javascript 火狐(firefox)不显示本地图片问题解决
2008/07/05 Javascript
在js中判断checkboxlist(.net控件客户端id)是否有选中
2013/04/11 Javascript
使用jQuery避免鼠标双击的解决方案
2013/08/21 Javascript
JQuery弹出层示例可自定义
2014/05/19 Javascript
window.location.href的用法(动态输出跳转)
2014/08/09 Javascript
Jquery easyui开启行编辑模式增删改操作
2016/01/14 Javascript
JS中的hasOwnProperty()和isPrototypeOf()属性实例详解
2016/08/11 Javascript
在vue中解决提示警告 for循环报错的方法
2018/09/28 Javascript
Express结合Webpack的全栈自动刷新
2019/05/23 Javascript
Vue中实现权限控制的方法示例
2019/06/07 Javascript
深度了解vue.js中hooks的相关知识
2019/06/14 Javascript
vue项目中使用AES实现密码加密解密(ECB和CBC两种模式)
2019/08/12 Javascript
webpack.DefinePlugin与cross-env区别详解
2020/02/23 Javascript
在Angular中实现一个级联效果的下拉框的示例代码
2020/05/20 Javascript
Element中Slider滑块的具体使用
2020/07/29 Javascript
openlayers实现地图测距测面
2020/09/25 Javascript
[40:05]LGD vs Winstrike 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/18 DOTA
一些Python中的二维数组的操作方法
2015/05/02 Python
Python的randrange()方法使用教程
2015/05/15 Python
Python3 处理JSON的实例详解
2017/10/29 Python
python绘图模块matplotlib示例详解
2019/07/26 Python
美国大城市最热门旅游景点门票:CityPASS
2016/12/16 全球购物
白色公司:The White Company
2017/10/11 全球购物
委托书样本
2014/04/02 职场文书
婚庆答谢词
2015/01/04 职场文书
留学推荐信英文范文
2015/03/26 职场文书
2015公司年度工作总结
2015/05/14 职场文书
redis 存储对象的方法对比分析
2021/08/02 Redis
ipad隐藏软件app图标方法
2022/04/19 数码科技