Gateway/Worker模型 数据库使用示例
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");
Gateway/Worker模型 数据库使用示例的更多相关文章
- Django模型-数据库操作
前言 前边记录的URLconf和Django模板全都是介绍页面展示的东西,也就是表现层的内容.由于Python先天具备简单而强大的数据库查询执行方法,Django 非常适合开发数据库驱动网站. 这篇开 ...
- django模型——数据库(二)
模型--数据库(二) 实验简介 模型的一些基本操作,save方法用于把对象写入到数据库,objects是模型的管理器,可以使用它的delete.filter.all.order_by和update等函 ...
- python Django教程 之 模型(数据库)、自定义Field、数据表更改、QuerySet API
python Django教程 之 模型(数据库).自定义Field.数据表更改.QuerySet API 一.Django 模型(数据库) Django 模型是与数据库相关的,与数据库相关的代码 ...
- 一个非常标准的Java连接Oracle数据库的示例代码
最基本的Oracle数据库连接代码(只针对Oracle11g): 1.右键项目->构建路径->配置构建路径,选择第三项“库”,然后点击“添加外部Jar”,选择“D:\Oracle\app\ ...
- Java连接Oracle数据库的示例代码
最基本的Oracle数据库连接代码(只针对Oracle11g): 1.右键项目->构建路径 ->配置构建路径,选择第三项“库”,然后点击“添加外部Jar”,选择 “D:\Oracle\ap ...
- 一个非常标准的连接Mysql数据库的示例代码
一.About Mysql 1.Mysql 优点 体积小.速度快.开放源码.免费 一般中小型网站的开发都选择 MySQL ,最流行的关系型数据库 LAMP / LNMP Linux作为操作系统 Apa ...
- 利用Microsoft Sql Server Management studio 创建数据库的示例
利用Microsoft Sql Server Management studio 创建数据库的示例方法如下: 一.打开安装好的Microsoft Sql Server Management stu ...
- 漫谈四种神经网络序列解码模型【附示例代码】 glimpse attention
漫谈四种神经网络序列解码模型[附示例代码] http://jacoxu.com/encoder_decoder/ [视觉注意力的循环神经网络模型]http://blog.csdn.net/leo_xu ...
- python爬虫构建代理ip池抓取数据库的示例代码
爬虫的小伙伴,肯定经常遇到ip被封的情况,而现在网络上的代理ip免费的已经很难找了,那么现在就用python的requests库从爬取代理ip,创建一个ip代理池,以备使用. 本代码包括ip的爬取,检 ...
随机推荐
- 7款让人惊叹的HTML5粒子动画特效
HTML5的很大一个优势就是可以更加便捷高效地制作网页粒子动画特效,特别是Canvas特性,可以实现在网页上绘制任何图形和动画.本文要分享7款让人惊叹的HTML5粒子动画特效,这些粒子特效都提供源代码 ...
- vs2010密钥
vs2010密钥 YCFHQ-9DWCY-DKV88-T2TMH-G7BHP
- ILOG JRules 和 WebSphere Process Server 集成概述
ILOG JRules 和 WebSphere Process Server 集成概述 简介 业务流程管理(Business Process Management,BPM)和业务规则管理系统(Busi ...
- Android内存机制分析2——分析APP内存使用情况
上面一篇文章说了Android应用运行在dalvik里面分配的堆和栈内存区别,以及程序中什么代码会在哪里运行.今天主要是讲解一下Android里面如何分析我们程序内存使用情况.以便后续可以分析我们程序 ...
- 【Java】使用pinyin4j获取汉字的全拼或首字母
汉字转拼音的工具类,常用于做汉字拼音的模糊查询. https://www.cnblogs.com/htyj/p/7891918.html
- python-opencv boundingRect使用注意
矩形边框(Bounding Rectangle)是说,用一个最小的矩形,把找到的形状包起来.还有一个带旋转的矩形,面积会更小,效果见下图 上代码 首先介绍下cv2.boundingRect(img)这 ...
- 通过shell脚本来rerun一个oozie调度失败的job,从而可以跳过执行失败的节点
标题很长:通过shell脚本来rerun一个oozie调度失败的job,从而可以跳过执行失败的节点 不过目前从oozie调度测试的例子来看,oozie本身的retry好像并没有参数可以控制跳过失败的节 ...
- yum使用过程中的常见错误
(1) 使用yum安装相关软件包时一直提示以下错误:repodata/repomd.xml: [Errno 4] IOError: <urlopen error (113>, Error: ...
- Hbuilder开发app实战-识岁03-文件上传
前言 做app不得不谈的问题就是文件上传.用hbuilder开发app让上传变的非常easy. Uploader Uploader模块管理网络上传任务,用于从本地上传各种文件到server,并支持跨域 ...
- freemarker自己定义标签报错(二)
freemarker自己定义标签 1.错误描写叙述 freemarker.core.ParseException: Unexpected end of file reached. at freemar ...