基於Hyperf+ SQL Server 實現的一個簡單資料庫curd,
第一次用這個框架操作SQL Server,不太熟悉,只能告訴大家大概的思路。
首先要裝一個SQL Server 的驅動ODBC。
然後要裝一個php SQL Server擴充套件 pdo_sqlsrv
還有一個擴充套件叫sqlsrv(操作函式),可裝可不裝,如果你直接用pdo是可以不裝的。
最後一步就是要利用hyperf task機制去投遞到task程式去處理這個任務。
composer require hyperf/task
<?php
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'],
],
];
<?php
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(),
];
}
}
<?php
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);
}
}
本作品採用《CC 協議》,轉載必須註明作者和本文連結