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中的MYSQL常用函数(php下操作数据库必备)
Sep 12 PHP
PHP服务器页面间跳转实现方法
Aug 02 PHP
使用php实现下载生成某链接快捷方式的解决方法
May 07 PHP
ThinkPHP3.1新特性之动态设置自动完成及自动验证示例代码
Jun 23 PHP
分享一则PHP定义函数代码
Feb 26 PHP
PHP浮点数精度问题汇总
May 13 PHP
详解WordPress中提醒安装插件以及隐藏插件的功能实现
Dec 25 PHP
PHP实现补齐关闭的HTML标签
Mar 22 PHP
[原创]php简单隔行变色功能实现代码
Jul 09 PHP
Laravel5.1自定义500错误页面示例
Oct 09 PHP
完美解决thinkphp唯一索引重复时出错的问题
Mar 31 PHP
laravel validate 设置为中文的例子(验证提示为中文)
Sep 29 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自定义函数截取汉字长度
2014/05/15 PHP
PHP的全局错误处理详解
2016/04/25 PHP
PHP中文字符串截断无乱码解决方法
2016/10/10 PHP
php函数mkdir实现递归创建层级目录
2016/10/27 PHP
php  单例模式详细介绍及实现源码
2016/11/05 PHP
详解关于php的xdebug配置(编辑器vscode)
2019/01/29 PHP
Thinkphp5.0 框架Model模型简单用法分析
2019/10/11 PHP
jQuery EasyUI API 中文文档 DateTimeBox日期时间框
2011/10/16 Javascript
JS格式化数字保留两位小数点示例代码
2013/10/15 Javascript
SuperSlide标签切换、焦点图多种组合插件
2015/03/14 Javascript
input输入框鼠标焦点提示信息
2015/03/17 Javascript
svg动画之动态描边效果
2017/02/22 Javascript
vue脚手架vue-cli的学习使用教程
2017/06/06 Javascript
微信小程序动态添加分享数据
2017/06/14 Javascript
AngularJS实现表格的增删改查(仅限前端)
2017/07/04 Javascript
详解nodejs通过代理(proxy)发送http请求(request)
2017/09/22 NodeJs
JS实现的哈夫曼编码示例【原始版与修改版】
2018/04/22 Javascript
JavaScript 中 JSON.parse 函数 和 JSON.stringify 函数
2018/12/05 Javascript
vue获取验证码倒计时组件
2019/08/26 Javascript
[03:10]2014DOTA2 TI马来劲旅Titan首战告捷目标只是8强
2014/07/10 DOTA
Python ftp上传文件
2016/02/13 Python
用python的requests第三方模块抓取王者荣耀所有英雄的皮肤实例
2017/12/14 Python
Python 将Matrix、Dict保存到文件的方法
2018/10/30 Python
python计算阶乘和的方法(1!+2!+3!+...+n!)
2019/02/01 Python
Python GUI编程 文本弹窗的实例
2019/06/11 Python
Django ORM 查询管理器源码解析
2019/08/05 Python
Python如何读取文件中图片格式
2020/01/13 Python
世界上最好的足球商店:Unisport
2019/03/02 全球购物
Tod’s英国官方网站:意大利奢华手工制作手袋和鞋履
2019/03/15 全球购物
超级英雄、电影和电视、乐队和音乐T恤:Loud Clothing
2019/09/01 全球购物
保安的辞职报告怎么写
2014/01/20 职场文书
社区平安建设方案
2014/05/25 职场文书
党员三严三实心得体会
2014/10/13 职场文书
大学生自我推荐信范文
2015/03/24 职场文书
严以修身专题学习研讨会发言材料
2015/11/09 职场文书
关于vue中如何监听数组变化
2021/04/28 Vue.js