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 4.2书写安全的脚本
Oct 09 PHP
php session 错误
May 21 PHP
发款php蜘蛛统计插件只要有mysql就可用
Oct 12 PHP
fleaphp crud操作之findByField函数的使用方法
Apr 23 PHP
PHP读取数据库并按照中文名称进行排序实现代码
Jan 29 PHP
解析php中curl_multi的应用
Jul 17 PHP
用 Composer构建自己的 PHP 框架之设计 MVC
Oct 30 PHP
PHP基于文件存储实现缓存的方法
Jul 20 PHP
开启PHP Static 关键字之旅模式
Nov 13 PHP
php实现微信公众号企业转账功能
Oct 01 PHP
Laravel使用原生sql语句并调用的方法
Oct 09 PHP
在TP5数据库中四个字段实现无限分类的示例
Oct 18 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 Document 代码注释规范
2009/04/13 PHP
解析ajax事件的调用顺序
2013/06/17 PHP
PHP Cookei记录用户历史浏览信息的代码
2016/02/03 PHP
关于PHP文件的自动运行方法分析
2016/05/13 PHP
基于PHP的登录和注册的功能的实现
2020/08/06 PHP
js Date自定义函数 延迟脚本执行
2010/03/10 Javascript
jQuery中hasClass()方法用法实例
2015/01/06 Javascript
JQuery标签页效果的两个实例讲解(4)
2015/09/17 Javascript
Jquery Easyui验证组件ValidateBox使用详解(20)
2016/12/18 Javascript
js中toString()和String()区别详解
2017/03/23 Javascript
vue弹窗插件实战代码
2018/09/08 Javascript
微信小程序导入Vant报错VM292:1 thirdScriptError的解决方法
2019/08/01 Javascript
Vue 组件的挂载与父子组件的传值实例
2020/09/02 Javascript
Python入门篇之文件
2014/10/20 Python
python实现删除文件与目录的方法
2014/11/10 Python
Python的Flask框架应用程序实现使用QQ账号登录的方法
2016/06/07 Python
简述Python2与Python3的不同点
2018/01/21 Python
Python实现PS滤镜功能之波浪特效示例
2018/01/26 Python
Python使用__new__()方法为对象分配内存及返回对象的引用示例
2019/09/20 Python
Python中低维数组填充高维数组的实现
2019/12/02 Python
Python预测2020高考分数和录取情况
2020/07/08 Python
Python就将所有的英文单词首字母变成大写
2021/02/12 Python
HTML5 Canvas标签使用收录
2009/07/07 HTML / CSS
HTML5+CSS3:3D展示商品信息示例
2017/01/03 HTML / CSS
意大利奢华内衣制造商:Cosabella
2017/08/29 全球购物
会计学个人自荐信模板
2013/12/13 职场文书
心得体会怎么写
2013/12/30 职场文书
生日寄语大全
2014/04/08 职场文书
星级党支部申报材料
2014/05/31 职场文书
国际经济与贸易专业求职信
2014/07/10 职场文书
食品委托检验协议书范本
2014/09/12 职场文书
2014年小学教师工作自我评价
2014/09/22 职场文书
区政府领导班子个人对照检查材料
2014/09/25 职场文书
关于学习的决心书
2015/02/05 职场文书
涪陵白鹤梁导游词
2015/02/09 职场文书
校友回访母校寄语
2015/02/26 职场文书