From: http://www.bubuko.com/infodetail-777418.html
1、數據庫配置Applications/XXX/Config/Db.php
<?php namespace Config; /** * mysql配置 * @author walkor */ class Db { /** * 數據庫的一個實例配置,則使用時像下面這樣使用 * $user_array = Db::instance(‘user‘)->select(‘name,age‘)->from(‘users‘)->where(‘age>12‘)->query(); * 等價於 * $user_array = Db::instance(‘user‘)->query(‘SELECT `name`,`age` FROM `users` WHERE `age`>12‘); * @var array */ public static $user = array( ‘host‘ => ‘127.0.0.1‘, ‘port‘ => 3306, ‘user‘ => ‘your_user_name‘, ‘password‘ => ‘your_password‘, ‘dbname‘ => ‘user‘, ‘charset‘ => ‘utf8‘, ); }
2、Applications/XXX/Event.php
<?php use \GatewayWorker\Lib\Gateway; use \GatewayWorker\Lib\Db; /** * 數據庫示例,假設有個user庫,里面有個user表 */ class Event { /** * 有消息時觸發該方法,根據發來的命令打印2個用戶信息 * @param int $client_id 發消息的client_id * @param string $message 消息 * @return void */ public static function onMessage($client_id, $message) { // 發來的消息 $commend = trim($message); if($commend !== ‘get_user_list‘) { Gateway::sendToClient($client_id, "unknown commend\n"); return; } // 獲取用戶列表(這里是臨時的一個測試數據庫) $ret = Db::instance(‘user‘)->select(‘*‘)->from(‘users‘)->where(‘uid>3‘)->offset(5)->limit(2)->query(); // 打印結果 return Gateway::sendToClient($client_id, var_export($ret, true)); } }
數據庫類使用的一些示例
配置
在Config/Db.php中配置數據庫信息,如果有多個數據庫,可以在Db.php中配置多個實例 例如下面配置了兩個數據庫實例
<?php namespace Config; class Db { // 數據庫實例1 public static $db1 = array( ‘host‘ => ‘127.0.0.1‘, ‘port‘ => 3306, ‘user‘ => ‘mysql_user‘, ‘password‘ => ‘mysql_password‘, ‘dbname‘ => ‘db1‘, ‘charset‘ => ‘utf8‘, ); // 數據庫實例2 public static $db2 = array( ‘host‘ => ‘127.0.0.1‘, ‘port‘ => 3306, ‘user‘ => ‘mysql_user‘, ‘password‘ => ‘mysql_password‘, ‘dbname‘ => ‘db2‘, ‘charset‘ => ‘utf8‘, ); }
使用方法
use \GatewayWorker\Lib\Db; $db1 = Db::instance(‘db1‘); $db2 = Db::instance(‘db2‘); // 獲取所有數據 $db1->select(‘ID,Sex‘)->from(‘Persons‘)->where(‘sex= :sex‘)->bindValues(array(‘sex‘=>‘M‘))->query(); //等價於 $db1->select(‘ID,Sex‘)->from(‘Persons‘)->where("sex= ‘F‘ ")->query(); //等價於 $db1->query("SELECT ID,Sex FROM `Persons` WHERE sex=‘M’"); // 獲取一行數據 $db1->select(‘ID,Sex‘)->from(‘Persons‘)->where(‘sex= :sex‘)->bindValues(array(‘sex‘=>‘M‘))->row(); //等價於 $db1->select(‘ID,Sex‘)->from(‘Persons‘)->where("sex= ‘F‘ ")->row(); //等價於 $db1->row("SELECT ID,Sex FROM `Persons` WHERE sex=‘M’"); // 獲取一列數據 $db1->select(‘ID‘)->from(‘Persons‘)->where(‘sex= :sex‘)->bindValues(array(‘sex‘=>‘M‘))->column(); //等價於 $db1->select(‘ID‘)->from(‘Persons‘)->where("sex= ‘F‘ ")->column(); //等價於 $db1->column("SELECT `ID` FROM `Persons` WHERE sex=‘M’"); // 獲取單個值 $db1->select(‘ID,Sex‘)->from(‘Persons‘)->where(‘sex= :sex‘)->bindValues(array(‘sex‘=>‘M‘))->single(); //等價於 $db1->select(‘ID,Sex‘)->from(‘Persons‘)->where("sex= ‘F‘ ")->single(); //等價於 $db1->single("SELECT ID,Sex FROM `Persons` WHERE sex=‘M‘"); // 復雜查詢 $db1->select(‘*‘)->from(‘table1‘)->innerJoin(‘table2‘,‘table1.uid = table2.uid‘)->where(‘age > :age‘)->groupBy(array(‘aid‘))->having(‘foo="foo"‘)->orderBy(array(‘did‘))->limit(10)->offset(20)->bindValues(arra y(‘age‘ => 13)); // 等價於 $db1->query(SELECT * FROM `table1` INNER JOIN `table2` ON `table1`.`uid` = `table2`.`uid` WHERE age > 13 GROUP BY aid HAVING foo="foo" ORDER BY did LIMIT 10 OFFSET 20“); // 插入 $insert_id = $db1->insert(‘Persons‘)->cols(array(‘Firstname‘=>‘abc‘, ‘Lastname‘=>‘efg‘, ‘Sex‘=>‘M‘, ‘Age‘=>13))->query(); 等價於 $insert_id = $db1->query("INSERT INTO `Persons` ( `Firstname`,`Lastname`,`Sex`,`Age`) VALUES ( ‘abc‘, ‘efg‘, ‘M‘, 13)"); // 更新 $row_count = $db1->update(‘Persons‘)->cols(array(‘sex‘))->where(‘ID=1‘)->bindValue(‘sex‘, ‘F‘)->query(); // 等價於 $row_count = $db1->update(‘Persons‘)->cols(array(‘sex‘=>‘F‘))->where(‘ID=1‘)->query(); // 等價於 $row_count = $db1->query("UPDATE `Persons` SET `sex` = ‘F‘ WHERE ID=1"); // 刪除 $row_count = $db1->delete(‘Persons‘)->where(‘ID=9‘)->query(); // 等價於 $row_count = $db1->query("DELETE FROM `Persons` WHERE ID=9");