swoole学习之mysql的坑笔记
一、PHP Fatal error: Uncaught Error: Class ‘Swoole\Mysql’ not found in
错误分析
原代码
<?php
class MysqlService
{
//定义一个变量
public $dbSource = '';
public $dbConfig = '';
//定义构造函数
public function __construct()
{
//实例化mysql服务
$this->dbSource = new Swoole\Mysql;
//配置mysql参数
$this->dbConfig = array(
'host' => '127.0.0.1',
'port' => '3306',
'user' => 'root',
'password' => '123456',
'database' => 'qipa250',
'charset' => 'utf8',
);
}
}
//实例化类
$db = new MysqlService();
执行命令
php mysqlService.php
报错
PHP Fatal error: Uncaught Error: Class 'Swoole\Mysql' not found in /data/web/swoole_mooc/io/mysqlService.php:14
Stack trace:
#0 /data/web/swoole_mooc/io/mysqlService.php(70): MysqlService->__construct()
#1 {main}
thrown in /data/web/swoole_mooc/io/mysqlService.php on line 14
Fatal error: Uncaught Error: Class 'Swoole\Mysql' not found in /data/web/swoole_mooc/io/mysqlService.php:14
Stack trace:
#0 /data/web/swoole_mooc/io/mysqlService.php(70): MysqlService->__construct()
#1 {main}
thrown in /data/web/swoole_mooc/io/mysqlService.php on line 14
这个错误是因为用了异步回调模块,swoole 4.3.0版本后已经移除了异步模块,所以会报错没有找到swoole_mysql模块,用Swoole\Mysql一样报错
解决方案
1、用Corotuine协程模块代替
2、回退到旧版本swoole(不推荐)
$this->dbSource = new Swoole\Coroutine\MySQL();
二、PHP Fatal error: Uncaught Swoole\Error: operation not support (reactor is not ready)
这个错是因为没有用协程方式运行脚本,而直接用了php运行,需要在代码外面套个go(function(){ …这里写内容},才能正常运行!
<?php
class MysqlService
{
//定义一个变量
public $dbSource = '';
public $dbConfig = '';
//定义构造函数
public function __construct()
{
//实例化mysql服务
$this->dbSource = new Swoole\Coroutine\MySQL();
//配置mysql参数
$this->dbConfig = array(
'host' => '127.0.0.1',
'port' => '3306',
'user' => 'root',
'password' => '123456',
'database' => 'qipa250',
'charset' => 'utf8',
);
}
public function execute()
{
// 连接
go(function () {
$this->dbSource->connect($this->dbConfig);
$res = $this->dbSource->query('select * from qipa_member');
if ($res === false) {
return;
}
var_dump($res);
// 关闭连接
$this->dbSource->close();
});
}
}
//实例化类
$db = new MysqlService();
$db->execute();
?>