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的SQL注入过程分析
Jan 06 PHP
深入密码加salt原理的分析
Jun 06 PHP
使用PHP Socket写的POP3类
Oct 30 PHP
PHP内置过滤器FILTER使用实例
Jun 25 PHP
php中json_encode处理gbk与gb2312中文乱码问题的解决方法
Jul 10 PHP
php函数与传递参数实例分析
Nov 15 PHP
php curl模拟post请求和提交多维数组的示例代码
Nov 19 PHP
php 防止表单重复提交两种实现方法
Nov 03 PHP
php使用高斯算法实现图片的模糊处理功能示例
Nov 11 PHP
微信封装的调用微信签名包的类库
Jun 08 PHP
详谈symfony window下的安装 安装时候出现的问题以及解决方法
Sep 28 PHP
PHP开发实现微信退款功能示例
Nov 25 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连接Oracle数据库
2006/10/09 PHP
php学习之 循环结构实现代码
2011/06/09 PHP
php通过function_exists检测函数是否存在的方法
2015/03/18 PHP
PHP实现动态压缩js与css文件的方法
2018/05/02 PHP
prototype 1.5 &amp; scriptaculous 1.6.1 学习笔记
2006/09/07 Javascript
JS获取地址栏参数的小例子
2013/08/23 Javascript
js返回前一页刷新本页重载页面
2014/07/29 Javascript
java、javascript实现附件下载示例
2014/08/14 Javascript
上传图片预览JS脚本 Input file图片预览的实现示例
2014/10/23 Javascript
javascript获取四位数字或者字母的随机数
2015/01/09 Javascript
jQuery中die()方法用法实例
2015/01/19 Javascript
js实现带缓冲效果的仿QQ面板折叠菜单代码
2015/09/06 Javascript
nodejs实现bigpipe异步加载页面方案
2016/01/26 NodeJs
小程序页面动态配置实现方法
2019/02/05 Javascript
JavaScript 格式化数字、金额、千分位、保留几位小数、舍入舍去
2019/07/23 Javascript
Node4-5静态资源服务器实战以及优化压缩文件实例内容
2019/08/29 Javascript
layui中select,radio设置不生效的解决方法
2019/09/05 Javascript
JavaScript事件循环及宏任务微任务原理解析
2020/09/02 Javascript
js实现简易拖拽的示例
2020/10/26 Javascript
JavaScript实现图片合成下载的示例
2020/11/19 Javascript
[13:16]INFAMOUS vs VGJ T BO3
2018/06/07 DOTA
python通过paramiko复制远程文件及文件目录到本地
2019/04/30 Python
ORM Django 终端打印 SQL 语句实现解析
2019/08/09 Python
python实现在线翻译
2020/06/18 Python
pycharm全局搜索的具体步骤
2020/07/28 Python
Grid 宫格常用布局的实现
2020/01/10 HTML / CSS
使用canvas绘制超炫时钟
2014/12/17 HTML / CSS
为智能设备设计个性化保护套网站:caseable
2017/01/05 全球购物
植物选择:Botanic Choice
2017/02/15 全球购物
eBay爱尔兰站:eBay.ie
2019/08/09 全球购物
客服文员岗位职责
2013/11/29 职场文书
学习十八届三中全会精神实施方案
2014/02/17 职场文书
迁户口计划生育证明
2014/10/19 职场文书
绍兴鲁迅故居导游词
2015/02/09 职场文书
工程资料员岗位职责
2015/04/13 职场文书
在Docker容器中部署SQL Server
2022/04/11 Servers