您的位置:首页 > 编程语言 > PHP开发

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

2014-11-17 00:00 555 查看
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);

?>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: