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 相关文章推荐
常用表单验证类,有了这个,一般的验证就都齐了。
Dec 06 PHP
完美解决thinkphp验证码出错无法显示的方法
Dec 09 PHP
thinkphp3.2.2实现生成多张缩略图的方法
Dec 19 PHP
Nginx下配置codeigniter框架方法
Apr 07 PHP
PHP的AES加密算法完整实例
Jul 20 PHP
PHP加密技术的简单实现
Sep 04 PHP
PHP通过引用传递参数用法分析
Dec 01 PHP
PHP二维数组去重算法
Dec 17 PHP
AJAX的使用方法详解
Apr 29 PHP
PHPUnit测试私有属性和方法功能示例
Jun 12 PHP
PHP 二维array转换json的实例讲解
Aug 21 PHP
PHP getName()函数讲解
Feb 03 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 5.3.0 安装分析心得
2009/08/07 PHP
Yii框架防止sql注入,xss攻击与csrf攻击的方法
2016/10/18 PHP
PHP手机号码及邮箱正则表达式实例解析
2020/07/11 PHP
动手学习无线电
2021/03/10 无线电
sina的lightbox效果。
2007/01/09 Javascript
JQuery优缺点分析说明
2010/06/09 Javascript
JS对文本框值的判断示例
2014/03/10 Javascript
浅析vue component 组件使用
2017/03/06 Javascript
jQuery实现div跟随鼠标移动
2020/08/20 jQuery
详解webpack 多入口配置
2017/06/16 Javascript
详解React 在服务端渲染的实现
2017/11/16 Javascript
超出JavaScript安全整数限制的数字计算BigInt详解
2018/06/24 Javascript
vue调试工具vue-devtools安装及使用方法
2018/11/07 Javascript
深入了解响应式React Native Echarts组件
2019/05/29 Javascript
js全屏事件fullscreenchange 实现全屏、退出全屏操作
2019/09/17 Javascript
JS实现可控制的进度条
2020/03/25 Javascript
在Vue中使用HOC模式的实现
2020/08/23 Javascript
[03:01]完美盛典趣味短片 DOTA2年度最佳&拉胯英雄
2019/12/07 DOTA
python+pyqt5编写md5生成器
2019/03/18 Python
使用Python控制摄像头拍照并发邮件
2019/04/23 Python
python3.4 将16进制转成字符串的实例
2019/06/12 Python
Python中使用gflags实例及原理解析
2019/12/13 Python
tensorflow中tf.slice和tf.gather切片函数的使用
2020/01/19 Python
Django 解决阿里云部署同步数据库报错的问题
2020/05/14 Python
Html5 web本地存储实例详解
2016/07/28 HTML / CSS
美国鲍勃商店:Bob’s Stores
2018/07/22 全球购物
后勤岗位职责
2013/11/26 职场文书
2014迎新年晚会策划方案
2014/02/23 职场文书
年度考核自我鉴定
2014/03/19 职场文书
信息与计算机科学职业规划范文:成为一艘有方向的船
2014/09/11 职场文书
见习报告的格式
2014/11/04 职场文书
水电工程师岗位职责
2015/02/13 职场文书
2015年扫黄打非工作总结
2015/05/13 职场文书
使用jpa之动态插入与修改(重写save)
2021/11/23 Java/Android
Spring Boot接口定义和全局异常统一处理
2022/04/20 Java/Android
Python查找算法的实现 (线性、二分,分块、插值查找算法)
2022/04/24 Python