swoole學習之異步Mysql

swoole學習之異步Mysql

官方示例:

$db = new swoole_mysql();$server = array(     'host' => '127.0.0.1',     'port' => 3306,     'user' => 'test',     'password' => 'test',     'database' => 'test',     'charset' => 'utf8', //指定字符集     'timeout' => 2,  // 可選:連接超時時間(非查詢超時時間),默認為SW_MYSQL_CONNECT_TIMEOUT(1.0));$db->connect($server, function ($db, $result) {     if ($result === false) {         var_dump($db->connect_errno, $db->connect_Error);         die;     }     $sql = 'show tables';     $db->query($sql, function(swoole_mysql $db, $result) {         if ($result === false)         {             var_dump($db->error, $db->errno);         }         elseif ($result === true )         {             var_dump($db->affected_rows, $db->insert_id);         }         var_dump($result);         $db->close();     });});

推薦(免費):swoole

常用函數:

connect($config, $callback) 連接數據庫

$config= array(     'host' => '127.0.0.1',     'port' => 3306,     'user' => 'test',     'password' => 'test',     'database' => 'test',     'charset' => 'utf8', //指定字符集     'timeout' => 2,  // 可選:連接超時時間(非查詢超時時間),默認為SW_MYSQL_CONNECT_TIMEOUT(1.0));
  • host 主機ip地址
  • port端口號,默認3306
  • user用戶名
  • password密碼
  • database選擇的數據庫
  • charset設置客戶端字符集
  • timeout 連接超時時間,默認1.0

$callback回調函數function($db, $result )

  • $db swoole_mysql的對象
  • $result 返回值 , 為true的時候才能執行query , 為false的時候 , 可以通過$db->connect_errno 和$db->connect_error獲取錯誤碼和錯誤信息

query($sql, $callback) 執行sql語句

$sql = "select * from test ";$db->query($sql,function($link,$result){});

$sql為要執行的SQL語句
$callback回調函數
每個mysqli連接只能同時執行一條SQL,必須等待返回結果才能執行下一條SQL

回調函數function($link,$result)

  • 當SQL執行失敗即$result == false的時候,通過$link->error可獲得錯誤信息,$link->errno獲得錯誤碼
  • 執行成功,$result == true ,通過$link->affected_rows獲得受影響的行數 , $link->insert_id獲得insert操作的自增ID
  • 執行成功 且SQL為查詢語句的時候, $result返回的是查詢結果數組

close關閉連接

 $db->close();

將整個SQL連接關閉

on($event_name,$callback) 回調函數

目前swoole_mysql只有一個onClose回調函數

//mysql連接關閉時,自動觸發$db->on('close',function($db){ 	echo "mysql connection is closed";});

swoole_mysql中的事物

在官方文檔中有詳細介紹:

begin(function($db,$result))開啟事物

  • 啟動一個MySQL事務,事務啟動成功會回調指定的函數
  • 與commit和rollback結合實現MySQL事務處理
  • 同一個MySQL連接對象,同一時間只能啟動一個事務
  • 必須等到上一個事務commit或rollback才能繼續啟動新事務
  • 否則底層會拋出SwooleMySQLException異常,異常code為21

commit($callback)提交事物

  • 提交事務,當服務器返回響應時回調此函數
  • 必須先調用begin啟動事務才能調用commit否則底層會拋出SwooleMySQLException異常
  • 異常code為22

rollback($callback)事物回滾

  • 必須先調用begin啟動事務才能調用rollback否則底層會拋出SwooleMySQLException異常
  • 異常code為22

官方示例:

$db->begin(function( $db, $result) {     $db->query("update userinfo set level = 22 where id = 1", function($db, $result) {         $db->commit(function($db, $result) {             echo "commit okn";         });     });});

? ? ? ? ? ? ? ?

以上就是

? 版權聲明
THE END
喜歡就支持一下吧
點贊7 分享