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 相关文章推荐
使用eAccelerator加密PHP程序
Oct 03 PHP
php中使用getimagesize获取图片、flash等文件的尺寸信息实例
Apr 29 PHP
php递归删除目录下的文件但保留的实例分享
May 10 PHP
PHP中的多行字符串传递给JavaScript的两种方法
Jun 19 PHP
PHP人民币金额转大写实例代码
Oct 02 PHP
PHP中each与list用法分析
Jan 08 PHP
Yii2框架制作RESTful风格的API快速入门教程
Nov 08 PHP
解决PHP 7编译安装错误:cannot stat ‘phar.phar’: No such file or directory
Feb 25 PHP
YII框架批量插入数据的方法
Mar 18 PHP
PHP实现深度优先搜索算法(DFS,Depth First Search)详解
Sep 16 PHP
PHP registerXPathNamespace()函数讲解
Feb 03 PHP
php函数式编程简单示例
Aug 08 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
ThinkPHP实现批量删除数据的代码实例
2014/07/02 PHP
php实现斐波那契数列的简单写法
2014/07/19 PHP
php构造函数的继承方法
2015/02/09 PHP
Zend Framework入门教程之Zend_Db数据库操作详解
2016/12/08 PHP
使用composer命令加载vendor中的第三方类库 的方法
2019/07/09 PHP
Javascript 二维数组
2009/11/26 Javascript
兼容Firefox的Javascript XSLT 处理XML文件
2014/12/31 Javascript
详解为Angular.js内置$http服务添加拦截器的方法
2016/12/20 Javascript
微信小程序 登陆流程详细介绍
2017/01/17 Javascript
基于BootStrap的前端分页带省略号和上下页效果
2017/05/18 Javascript
在 Linux/Unix 中不重启 Vim 而重新加载 .vimrc 文件的流程
2018/03/21 Javascript
记一次Vue.js混入mixin的使用(分权限管理页面)
2019/04/17 Javascript
nodejs实现获取本地文件夹下图片信息功能示例
2019/06/22 NodeJs
ES6常用小技巧总结【去重、交换、合并、反转、迭代、计算等】
2019/12/21 Javascript
React中获取数据的3种方法及优缺点
2020/02/18 Javascript
在Python程序中操作文件之isatty()方法的使用教程
2015/05/24 Python
python发送邮件功能实现代码
2016/07/15 Python
Python文件夹与文件的相关操作(推荐)
2016/07/25 Python
Django日志模块logging的配置详解
2017/02/14 Python
基于Django统计博客文章阅读量
2019/10/29 Python
html5本地存储之localstorage 、本地数据库、sessionStorage简单使用示例
2014/05/08 HTML / CSS
东南亚地区最大的购物网站Lazada新加坡站点:Lazada.sg
2016/07/17 全球购物
Deichmann英国:德国鞋类零售商
2021/01/30 全球购物
如何提高SQL Server的安全性
2016/07/25 面试题
校园之声广播稿
2014/01/31 职场文书
遗嘱继承公证书
2014/04/09 职场文书
小学教师评语大全
2014/04/23 职场文书
大学生找工作求职信
2014/07/09 职场文书
国家奖学金获奖感言
2014/08/16 职场文书
大学生简短的自我评价
2014/09/12 职场文书
民族学专业大学生职业规划范文:清晰未来的构想
2014/09/20 职场文书
四风问题自我剖析材料
2014/10/07 职场文书
党的群众路线教育实践活动总结
2014/10/30 职场文书
2014年评职称工作总结
2014/11/20 职场文书
自书遗嘱范文
2015/08/07 职场文书
CSS元素定位之通过元素的标签或者元素的id、class属性定位详解
2022/09/23 HTML / CSS