This article mainly introduces the example of using anonymous functions to operate databases in PHP. This article provides code, examples, and inheritance examples for classes. For more information, see
The Code is as follows:
Base dao class implements strating 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 ("cocould not connect:". mysql_error ());
If (! Mysql_select_db (dbName ))
Die ("cocould 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 );
?>