workerman mysql_workerman/mysql
Workerman/MySQL
说明
常驻内存的程序在使用mysql时经常会遇到mysql gone away的错误,这个是由于程序与mysql的连接长时间没有通讯,连接被mysql服务端踢掉导致。本数据库类可以解决这个问题,当发生mysql gone away错误时,会自动重试一次。
依赖的扩展
该mysql类依赖pdo和pdo_mysql两个扩展,缺少扩展会报Undefined class constant 'MYSQL_ATTR_INIT_COMMAND' in ....错误。
命令行运行php -m会列出所有php cli已安装的扩展,如果没有pdo 或者 pdo_mysql,请自行安装。
centos系统
PHP5.x
yum install php-pdo
yum install php-mysql
PHP7.x
yum install php70w-pdo_dblib.x86_64
yum install php70w-mysqlnd.x86_64
如果找不到包名,请尝试用yum search php mysql查找
ubuntu/debian系统
PHP5.x
apt-get install php5-mysql
PHP7.x
apt-get install php7.0-mysql
如果找不到包名,请尝试用apt-cache search php mysql查找
以上方法无法安装?
安装 Workerman/MySQL
方法1:
可以通过composer安装,命令行运行以下命令(composer源在国外,安装过程可能会非常慢)。
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/
composer require workerman/mysql
上面命令成功后会生成vendor目录,然后在项目中引入vendor下的autoload.php。
require_once __DIR__ . '/vendor/autoload.php';
方法2:
下载源码,解压后的目录放到自己项目中(位置任意),直接require源文件。
require_once '/your/path/of/mysql-master/src/Connection.php';
注意
强烈建议在onWorkerStart回调中初始化数据库连接,避免在Worker::runAll();运行前就初始化连接,在Worker::runAll();运行前初始化的连接属于主进程,子进程会继承这个连接,主进程和子进程共用相同的数据库连接会导致错误。
示例
use Workerman\Worker;
require_once __DIR__ . '/Workerman/Autoloader.php';
require_once __DIR__ . '/vendor/autoload.php';
$worker = new Worker('websocket://0.0.0.0:8484');
$worker->onWorkerStart = function($worker){
// 将db实例存储在全局变量中(也可以存储在某类的静态成员中)
global $db;
$db = new \Workerman\MySQL\Connection('host', 'port', 'user', 'password', 'db_name');
};
$worker->onMessage = function($connection, $data){
// 通过全局变量获得db实例
global $db;
// 执行SQL
$all_tables = $db->query('show tables');
$connection->send(json_encode($all_tables));
};
// 运行worker
Worker::runAll();
具体MySQL/Connection用法
// 初始化db连接
$db = new \Workerman\MySQL\Connection('host', 'port', 'user', 'password', 'db_name');
// 获取所有数据
$db->select('ID,Sex')->from('Persons')->where('sex= :sex AND ID = :id')->bindValues(array('sex'=>'M', 'id' => 1))->query();
//等价于
$db->select('ID,Sex')->from('Persons')->where("sex= 'M' AND ID = 1")->query();
//等价于
$db->query("SELECT ID,Sex FROM `Persons` WHERE sex='M' AND ID = 1");
// 获取一行数据
$db->select('ID,Sex')->from('Persons')->where('sex= :sex')->bindValues(array('sex'=>'M'))->row();
//等价于
$db->select('ID,Sex')->from('Persons')->where("sex= 'M' ")->row();
//等价于
$db->row("SELECT ID,Sex FROM `Persons` WHERE sex='M'");
// 获取一列数据
$db->select('ID')->from('Persons')->where('sex= :sex')->bindValues(array('sex'=>'M'))->column();
//等价于
$db->select('ID')->from('Persons')->where("sex= 'F' ")->column();
//等价于
$db->column("SELECT `ID` FROM `Persons` WHERE sex='M'");
// 获取单个值
$db->select('ID')->from('Persons')->where('sex= :sex')->bindValues(array('sex'=>'M'))->single();
//等价于
$db->select('ID')->from('Persons')->where("sex= 'F' ")->single();
//等价于
$db->single("SELECT ID FROM `Persons` WHERE sex='M'");
// 复杂查询
$db->select('*')->from('table1')->innerJoin('table2','table1.uid = table2.uid')->where('age > :age')->groupBy(array('aid'))->having('foo="foo"')->orderByASC/*orderByDESC*/(array('did'))
->limit(10)->offset(20)->bindValues(array('age' => 13));
// 等价于
$db->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 = $db->insert('Persons')->cols(array(
'Firstname'=>'abc',
'Lastname'=>'efg',
'Sex'=>'M',
'Age'=>13))->query();
等价于
$insert_id = $db->query("INSERT INTO `Persons` ( `Firstname`,`Lastname`,`Sex`,`Age`)
VALUES ( 'abc', 'efg', 'M', 13)");
// 更新
$row_count = $db->update('Persons')->cols(array('sex'))->where('ID=1')
->bindValue('sex', 'F')->query();
// 等价于
$row_count = $db->update('Persons')->cols(array('sex'=>'F'))->where('ID=1')->query();
// 等价于
$row_count = $db->query("UPDATE `Persons` SET `sex` = 'F' WHERE ID=1");
// 删除
$row_count = $db->delete('Persons')->where('ID=9')->query();
// 等价于
$row_count = $db->query("DELETE FROM `Persons` WHERE ID=9");
// 事务
$db->beginTrans();
....
$db->commitTrans(); // or $db->rollBackTrans();
workerman mysql_workerman/mysql相关推荐
- workerman连接mysql_workerman Mysql使用
// 初始化db连接 $db = new \Workerman\MySQL\Connection('host', 'port', 'user', 'password', 'db_name'); // ...
- php+mysql+workerman+uni-app开发一套新能源汽车充电桩管理平台
前言 充电桩管理系统按理用springboot技术架构去解决,但因为客户的开发周期短,预算低原因,我们使用了我们最熟悉的php+workerman技术栈解决了,经过2个月的开发,一年的使用,目前整套系 ...
- workerman高并发异步mysql_workerman怎么实现高并发
并发概念太模糊,这里以两种可以量化的指标并发连接数和并发请求数来说明. 并发连接数是指服务器当前时刻一共维持了多少TCP连接,而这些连接上是否有数据通讯并不关注. (推荐学习: workerman教程 ...
- workerman mysql git_swoole和workerman哪个更易开发?
因为项目需要, 智能家居一类的, 本来准备用C做, 想想swoole和workerman很火很成熟, 不少稳定应用场景了, 想想为什么不能用这俩试一下呢? 我C水平那么烂, 用PHP能满足需求多好? ...
- workerman的基本用法
workerman是什么? Workerman是一个异步事件驱动的PHP框架,具有高性能,可轻松构建快速,可扩展的网络应用程序.支持HTTP,Websocket,SSL和其他自定义协议.支持libev ...
- workerman结合laravel开发在线聊天应用的示例代码
项目背景: 最近由于公司的业务需求,需要用到聊天功能.而且有比较多的个性化需求需要定制.之前使用别人的聊天组件是基于微擎的.如果要移植到普通的H5在逻辑修改还有定制上存在比较多的困难.为此只能克服困难 ...
- php使用workerman实战,使用workerman实现在线聊天的方法
workerman 是一个php编写的通讯服务.之前的项目都是用它做数据接口服务 这次用它做一个简单的在线聊天室~ 1.下载最新版本的workerman 可以去http://www.workerman ...
- ubuntu workerman kaer
2019独角兽企业重金招聘Python工程师标准>>> debian/ubuntu系统安装教程(如果不是root用户请用sudo 后面加命令) http://programmer.s ...
- workman php 安装,workerman安装及遇到的问题解决
下面由workerman入门教程栏目给大家介绍workerman安装及遇到的问题解决方法,希望对需要的朋友有所帮助! 1.workerman安装 workerman是php的一个socket框架,简化 ...
最新文章
- Qt 学习之路:模型-视图高级技术
- 从Java到Spring为何独得青睐Spring Summit 2017不可不知的那些事儿
- 网络回溯分析技术八大应用之运维评估 网络运维的真正价值
- mac怎么用c语言写文件路径,Mac 中使用os模块更改文件路径
- PHPcms 把盛大登陆换成人人网登陆
- HTML---HTML简介
- 网页挂码方式html css,CSS代码 解决网页挂马问题
- Mr.J-- 图片墙动画效果
- Springboot整合ES
- 2019年在NLP领域,资源有限的个人/团队能做哪些有价值有希望的工作?
- 红帽 Red Hat Linux相关产品iso镜像下载【百度云】(转载)
- JavaSE基础——异常、File文件类
- 关于opencv4.5.3读取视频失败问题
- scala教程(一)
- python pyhook_python pyHook安装
- 离散数学-⑦-离散概率
- 如何搜索自己博客内的文章
- N-BaIoT-Network-based-Detection-of-IoT-Botnet-Attacks
- MapProxy的部署与TMS地图服务代理
- java xlsm_使用apache poi写入xlsm(Excel 2007)
热门文章
- 计算机应用基础试模块5ACCSE,2015年计算机二级《Access》上机最后冲刺卷(1)
- python 不确定度_python机器学习-chapter2_16
- threejs坐标转换
- C++中正确使用PRId64
- 好奇怪呀后面加什么标点_狗狗吃饭时奇怪的小动作,你知道代表什么吗?做个懂狗的好主人...
- 【转】Linux的.a、.so和.o文件
- 理解 Azure 平台中虚拟机的计算能力
- 【转】2.3SharePoint服务器端对象模型 之 访问网站和列表数据(Part 3)
- Team Foundation Server的回滚操作
- 【Python CheckiO 题解】Roman Numerals