PHP中使用匿名函数操作数据库的例子

 更新时间:2014年11月17日 11:39:46   投稿:junjie  
这篇文章主要介绍了PHP中使用匿名函数操作数据库的例子,本文直接给出类的代码、使用例子、继承例子,需要的朋友可以参考下

复制代码 代码如下:

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);

?>

相关文章

  • thinkphp跨库操作的简单代码实例

    thinkphp跨库操作的简单代码实例

    下面小编就为大家带来一篇thinkphp跨库操作的简单代码实例。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-09-09
  • php一键打包压缩目录文件示例代码

    php一键打包压缩目录文件示例代码

    这篇文章主要介绍了php一键打包压缩目录文件代码示例,代码简单易懂,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-10-10
  • Yii框架模拟组件调用注入示例

    Yii框架模拟组件调用注入示例

    这篇文章主要介绍了Yii框架模拟组件调用注入,结合实例形式分析了Yii框架存储服务功能组件与调用相关操作技巧,需要的朋友可以参考下
    2019-11-11
  • php cli配置文件问题分析

    php cli配置文件问题分析

    这篇文章主要介绍了php cli配置文件问题分析,需要的朋友可以参考下
    2015-10-10
  • php使用fullcalendar日历插件详解

    php使用fullcalendar日历插件详解

    这篇文章主要介绍了php使用fullcalendar日历插件的教程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-03-03
  • thinkphp,onethink和thinkox中验证码不显示的解决方法分析

    thinkphp,onethink和thinkox中验证码不显示的解决方法分析

    这篇文章主要介绍了thinkphp,onethink和thinkox中验证码不显示的解决方法,简单分析了thinkPHP验证码不显示的原因与相应的解决方法,具有一定参考借鉴价值,需要的朋友可以参考下
    2016-06-06
  • laravel-admin 后台表格筛选设置默认的查询日期方法

    laravel-admin 后台表格筛选设置默认的查询日期方法

    今天小编就为大家分享一篇laravel-admin 后台表格筛选设置默认的查询日期方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-10-10
  • php获取referer防非法访问

    php获取referer防非法访问

    这篇文章主要介绍了php获取referer防非法访问,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-08-08
  • php处理多图上传压缩代码功能

    php处理多图上传压缩代码功能

    这篇文章主要介绍了php处理多图上传压缩代码功能,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2018-06-06
  • php使用wangeditor实现富文本遇见问题及两种解决方法

    php使用wangeditor实现富文本遇见问题及两种解决方法

    在 PowerShell 中使用 npm install 命令时,命令行解析器可能会将 @ 符号解释为特殊字符,导致出现错误,遇到这样的问题如何解决呢,下面通过本文介绍php使用wangeditor实现富文本-遇见问题,需要的朋友可以参考下
    2023-12-12

最新评论