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 相关文章推荐
Access数据库导入Mysql的方法之一
Oct 09 PHP
FCKeditor的安装(PHP)
Jan 13 PHP
5种PHP创建数组的实例代码分享
Jan 17 PHP
php自动识别文件编码并转换为UTF-8的方法
Jun 12 PHP
php绘制一条弧线的方法
Jan 24 PHP
PHP实现获取客户端IP并获取IP信息
Mar 17 PHP
PHP中trim()函数简单使用指南
Apr 16 PHP
php使用CURL不依赖COOKIEJAR获取COOKIE的方法
Jun 17 PHP
Yii框架中sphinx索引配置方法解析
Oct 18 PHP
使用SMB共享来绕过php远程文件包含的限制执行RFI的利用
May 31 PHP
解决thinkPHP 5 nginx 部署时,只跳转首页的问题
Oct 16 PHP
PHP的重载使用魔术方法代码实例详解
Feb 26 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数组函数序列之krsort()- 对数组的元素键名进行降序排序,保持索引关系
2011/11/02 PHP
PHP实现长文章分页实例代码(附源码)
2016/02/03 PHP
Yii2选项卡的简单使用
2017/05/26 PHP
laravel学习笔记之模型事件的几种用法示例
2017/08/15 PHP
Javascript面向对象编程(二) 构造函数的继承
2011/08/28 Javascript
web的各种前端打印方法之jquery打印插件jqprint实现网页打印
2013/01/09 Javascript
我的NodeJs学习小结(一)
2014/07/06 NodeJs
JQuery设置时间段下拉选择实例
2014/12/30 Javascript
基于javascript如何传递特殊字符
2015/11/30 Javascript
Javascript6中字符串的四个新用法分享
2016/09/11 Javascript
node.js基于mongodb的搜索分页示例
2017/01/22 Javascript
详解用vue-cli来搭建vue项目和webpack
2017/04/20 Javascript
JS数组操作之增删改查的简单实现
2017/08/21 Javascript
koa-router源码学习小结
2018/09/07 Javascript
支付宝小程序tabbar底部导航
2018/11/06 Javascript
vue element-ui读取pdf文件的方法
2019/11/26 Javascript
微信小程序实现一个简单swiper代码实例
2019/12/30 Javascript
vue请求数据的三种方式
2020/03/04 Javascript
[01:06:30]DOTA2-DPC中国联赛定级赛 Phoenix vs DLG BO3第二场 1月9日
2021/03/11 DOTA
让python json encode datetime类型
2010/12/28 Python
python读写json文件的简单实现
2017/04/11 Python
使用Django简单编写一个XSS平台的方法步骤
2019/03/25 Python
Python玩转加密的技巧【推荐】
2019/05/13 Python
Python通过Manager方式实现多个无关联进程共享数据的实现
2019/11/07 Python
canvas绘制树形结构可视图形的实现
2020/04/03 HTML / CSS
采购文员岗位职责
2013/11/20 职场文书
秋季运动会活动方案
2014/02/05 职场文书
2014年消防工作实施方案
2014/02/20 职场文书
《最大的麦穗》教学反思
2014/04/17 职场文书
工商企业管理应届生求职信
2014/05/04 职场文书
学校春季防火方案
2014/06/08 职场文书
2014年社区党建工作汇报材料
2014/11/02 职场文书
学校禁毒宣传活动总结
2015/05/08 职场文书
党校团干班培训心得体会
2016/01/06 职场文书
springboot+VUE实现登录注册
2021/05/27 Vue.js
Java完整实现记事本代码
2022/06/16 Java/Android