PHP中使用匿名函数操作数据库的例子_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);

?>

时间: 2024-09-14 16:19:30

PHP中使用匿名函数操作数据库的例子_php实例的相关文章

CI框架中redis缓存相关操作文件示例代码_php实例

本文实例讲述了CI框架中redis缓存相关操作文件.分享给大家供大家参考,具体如下: redis缓存类文件位置: 'ci\system\libraries\Cache\drivers\Cache_redis.php' <?php /** * CodeIgniter * * An open source application development framework for PHP 5.2.4 or newer * * NOTICE OF LICENSE * * Licensed under

PHP中使用smarty生成静态文件的例子_php实例

首先先要把需要静态化的内容填充到模版中去 复制代码 代码如下: #eg.这个是静态化首页的 function staticIndex(){ $newslist = $article->getArticles(null,54,'DESC',1,6,false,1,2,'',0,0,1);   if($newslist){    foreach($newslist as $k=>$v){     $newslist[$k]['title_all'] = $v['title'];     $news

在Yii框架中使用PHP模板引擎Twig的例子_php实例

Twig是一款快速.安全.灵活的PHP模板引擎,它内置了许多filter和tags,并且支持模板继承,能让你用最简洁的代码来描述你的模板.他的语法和Python下的模板引擎Jinjia以及Django的模板语法都非常像. 比如我们在PHP中需要输出变量并且将其进行转义时,语法比较累赘: 复制代码 代码如下: <?php echo $var ?><?php echo htmlspecialchars(\$var, ENT_QUOTES, 'UTF-8') ?> 但是在Twig中可以这

PHP中模拟处理HTTP PUT请求的例子_php实例

关于HTTP PUT详细介绍请参阅此文:http://www.jb51.net/article/52515.htm. PHP里有$_GET,$_POST,但是没有$_PUT,所以如果需要使用它的话,则你不得不自己模拟一下: 复制代码 代码如下:  $_PUT = array(); if ('PUT' == $_SERVER['REQUEST_METHOD']) {      parse_str(file_get_contents('php://input'), $_PUT);  } 通过php:

Javascript中的匿名函数与封装介绍

 这篇文章主要介绍了Javascript中的匿名函数与封装介绍,本文分析了jQuery 封装.Backbone 封装.Underscore 封装等内容,需要的朋友可以参考下     迷惑了一会儿不同JS库的封装后,终于有了点头绪.大致就是: 代码如下: 创建一个自调用匿名函数,设计参数window,并传入window对象. 而这个过程的目的则是, 代码如下: 使得自身的代码不会被其他代码污染,同时也可以不污染其他代码. jQuery 封装   于是找了个早期版本的jQuery,版本号是1.7.1

java中文件读取文件操作数据库

问题描述 java中文件读取文件操作数据库 给个例子 谢谢 解决方案 连接数据库:public class DBConnect {public Connection getConnect(String driver, String url, String user, String pwd) {Connection conn = null;try {Class.forName(driver);conn = DriverManager.getConnection(url, user, pwd);}

jquery+ajax+C#实现无刷新操作数据库数据的简单实例

 本篇文章主要是对jquery+ajax+C#实现无刷新操作数据库数据的简单实例进行了介绍,需要的朋友可以过来参考下,希望对大家有所帮助 我们知道同步执行和异步执行的区别,为了更好的提高用户的体验,我们都会采用异步方式去处理一些问题,毕竟单线程的同步可能回造成卡死等现象,很不友好,所以可以使用ajax来完成用户的体验,现在我们就来说说如何使用jquery的ajax来实现无刷新的获取内容   我们只是单方面的获取内容,分页等就不考虑了,后期会讲到无刷新的分页   页面中我们放置一个Div容器用来存

深入理解PHP中的匿名函数

  匿名函数的作用就是扩大函数的使用功能,在PHP 5.3以前,传递Callback的方式,我们只有俩种选择: ◆字符串的函数名 ◆使用create_function的返回 在PHP5.3以后, 我们多了一个选择, 也就是Closure. $func = function () { ... };   array_walk($arr, $func);  从实现上来说, 第一种方式: 传递函数名字符串是最简单的.而第二种方式create_function, 其实和第一种方式本质上一样的, creat

iOS开发中使用SQL语句操作数据库的基本用法指南_IOS

SQL代码应用示例 一.使用代码的方式批量添加(导入)数据到数据库中 1.执行SQL语句在数据库中添加一条信息 插入一条数据的sql语句: 点击run执行语句之后,刷新数据 2.在ios项目中使用代码批量添加多行数据示例 代码示例: 复制代码 代码如下: // //  main.m //  01-为数据库添加多行数据 // //  Created by apple on 14-7-26. //  Copyright (c) 2014年 wendingding. All rights reserv