php+控制器+数据库,基于 Hyperf+ SQL Server 实现的一个简单数据库 curd

本文介绍了如何结合Hyperf框架和SQLServer进行数据库的基本CURD操作。首先,需要安装ODBC驱动和PHP的pdo_sqlsrv及sqlsrv扩展。接着,通过Hyperf的Task机制将操作异步化,创建SqlSrvTask类处理SQL连接和查询。在控制器中,调用Task并打印结果。这是一个简单的Hyperf操作SQLServer数据库的实例。
摘要由CSDN通过智能技术生成

介绍

基于Hyperf+ SQL Server 实现的一个简单数据库curd,

思路

第一次用这个框架操作SQL Server,不太熟悉,只能告诉大家大概的思路。

首先要装一个SQL Server 的驱动ODBC。

然后要装一个php SQL Server扩展 pdo_sqlsrv

还有一个扩展叫sqlsrv(操作函数),可装可不装,如果你直接用pdo是可以不装的。

最后一步就是要利用hyperf task机制去投递到task进程去处理这个任务。

92777ecc9364a1e9d317942d96c0bd77.png

e95db8d4c8754ad258dc369d0c7ff3a9.png

89f063c166abff731716caa48d5680ab.png

检查扩展 [php -m]

dd86c9e209991875cc4fc4ec85098fce.png

安装Task [config/autoload/server.php]

composer require hyperf/task

declare(strict_types=1);

use Hyperf\Server\SwooleEvent;

return [

// 这里省略了其它不相关的配置项

'settings' => [

// Task Worker 数量,根据您的服务器配置而配置适当的数量

'task_worker_num' => 8,

// 因为 `Task` 主要处理无法协程化的方法,所以这里推荐设为 `false`,避免协程下出现数据混淆的情况

'task_enable_coroutine' => false,

],

'callbacks' => [

// Task callbacks

SwooleEvent::ON_TASK => [Hyperf\Framework\Bootstrap\TaskCallback::class, 'onTask'],

SwooleEvent::ON_FINISH => [Hyperf\Framework\Bootstrap\FinishCallback::class, 'onFinish'],

],

];

Task相关代码

namespace App\Task;

use Hyperf\Utils\Coroutine;

class SqlSrvTask

{

public function handle($cid)

{

$serverName = "127.0.0.1";

$connectionInfo = array(

"Database" => "test",

"UID" => "test",

"PWD" => "123456"

);

$conn = sqlsrv_connect($serverName, $connectionInfo);

if ($conn === false) {

//日志

}

$sql = "INSERT INTO Table_1 (id, data) VALUES (?, ?)" ;

$params = array( 1 , "some data" );

$stmt = sqlsrv_query($conn, $sql, $params);

if ($stmt === false) {

//日志

}

return [

'worker.cid' => $cid,

// task_enable_coroutine 为 false 时返回 -1,反之 返回对应的协程 ID

'task.cid' => Coroutine::id(),

];

}

}

控制器代码

namespace App\Controller;

use Hyperf\Utils\Coroutine;

use Hyperf\Utils\ApplicationContext;

use App\Task\SqlSrvTask;

class IndexController extends Controller

{

/**

* test投递

*/

public function test()

{

$client = ApplicationContext::getContainer()->get(SqlSrvTask::class);

$res=$client->handle(Coroutine::id());

var_dump($res);

}

}

结果

fbac6a5cf979dd33ecfd6b5b895fbd4a.png

本作品采用《CC 协议》,转载必须注明作者和本文链接

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值