Heim  >  Artikel  >  PHP-Framework  >  Swoole lernt asynchrones MySQL

Swoole lernt asynchrones MySQL

coldplay.xixi
coldplay.xixinach vorne
2021-03-18 11:27:472180Durchsuche

Swoole lernt asynchrones MySQL

Offizielles Beispiel:

$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();
    });});

Empfohlen (kostenlos): swoole

Allgemeine Funktionen:

connect($config, $callback) Mit Datenbank verbinden

$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 Host-IP-Adresseconnect($config, $callback) 连接数据库
    $sql = "select * from test ";$db->query($sql,function($link,$result){});
    • 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语句

     $db->close();

    $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关闭连接

    //mysql连接关闭时,自动触发$db->on('close',function($db){
    	echo "mysql connection is closed";});

    将整个SQL连接关闭

    on($event_name,$callback) 回调函数

    目前swoole_mysql只有一个onClose回调函数

    $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 ok\n";
            });
        });});

    swoole_mysql中的事物

    在官方文档中有详细介绍:

    begin(function($db,$result))开启事物

    • 启动一个MySQL事务,事务启动成功会回调指定的函数
    • commitrollback结合实现MySQL事务处理
    • 同一个MySQL连接对象,同一时间只能启动一个事务
    • 必须等到上一个事务commit或rollback才能继续启动新事务
    • 否则底层会抛出SwooleMySQLException异常,异常code21

    commit($callback)提交事物

    • 提交事务,当服务器返回响应时回调此函数
    • 必须先调用begin启动事务才能调用commit否则底层会抛出SwooleMySQLException异常
    • 异常code22

    rollback($callback)事物回滚

    • 必须先调用begin启动事务才能调用rollback否则底层会抛出SwooleMySQLException异常
    • 异常code22
    • portPortnummer, Standard 3306
    • userBenutzername
    passwordPassword

  • databaseDie ausgewählte Datenbank
  • charsetLegen Sie den Client-Zeichensatz fest

  • Zeitüberschreitung Verbindungszeitüberschreitung, Standard 1.0🎜🎜$callbackCallback function function($db, $result)🎜
    • $ db swoole_mysql-Objekt 🎜
    • $result Rückgabewert, query kann nur ausgeführt werden, wenn es wahr ist und wenn es false ist code> können Sie den Fehlercode und die Fehlerinformationen über $db->connect_errno und $db->connect_error🎜🎜🎜query($sql.) abrufen , $callback) SQL-Anweisung ausführenrrreee🎜$sql ist die auszuführende SQL-Anweisung
      $callbackCallback-Funktion
      Jeder MySQLi Die Verbindung kann nur eine SQL gleichzeitig ausführen, und Sie müssen auf das Rückgabeergebnis warten, bevor Sie die nächste SQL ausführen🎜🎜Rückruffunktion function($link,$result)🎜
    • Wenn die SQL-Ausführung fehlschlägtWenn $result == false, kann die Fehlermeldung über $link->error und der Fehlercode abgerufen werden erhalten Sie über $link->errno🎜Ausführung erfolgreich, $result == true, erhalten Sie die Anzahl der betroffenen Zeilen über $link- >affected_rows, $link->insert_id code>Rufen Sie die Auto-Inkrement-ID des insert-Vorgangs ab🎜
    • Wenn die Ausführung erfolgreich ist und Das SQL ist eine Abfrageanweisung. $result gibt das Abfrageergebnis-Array zurück. 🎜🎜🎜 >on($event_name,$callback)
    • Rückruffunktion
      🎜aktuell swoole_mysql hat nur eine onClose Rückruffunktion 🎜
      rrreee🎜🎜Dinge in swoole_mysql 🎜🎜
      🎜 werden ausführlich in der offiziellen Dokumentation beschrieben: 🎜
      🎜begin(function($db,$result))Öffne Dinge
      • Starten Sie eine MySQL-Transaktion. Wenn die Transaktion erfolgreich gestartet wurde, wird die angegebene Funktion zurückgerufen🎜
      • Kombiniert mit commit und Rollback zur Implementierung der MySQL-Transaktionsverarbeitung🎜
      • Dasselbe MySQL-Verbindungsobjekt. Es kann nur eine Transaktion gleichzeitig gestartet werden🎜
      • Sie muss warten, bis die vorherige Transaktion commit oder rollback ist, um mit dem Starten einer neuen Transaktion fortzufahren 🎜
      • Andernfalls löst die unterste Ebene eine SwooleMySQLExceptionAusnahme aus , die Ausnahme code ist 21🎜🎜🎜commit($callback)Transaktion festschreiben
        • Transmit der Transaktion und rufen Sie diese Funktion auf, wenn der Server eine Antwort zurückgibt🎜
        • Sie müssen zuerst begin aufrufen, um die Transaktion zu starten, bevor Sie commit aufrufen, andernfalls löst die unterste Ebene eine SwooleMySQLException-Ausnahme aus🎜
        • Exceptioncode ist 22🎜🎜🎜rollback($callback)Thing rollback
          • Begin muss aufgerufen werden, um die Transaktion zu starten bevor Rollback aufgerufen werden kann. Andernfalls wirft die unterste Ebene die Ausnahme SwooleMySQLException aus 🎜
          • Die Ausnahme code ist 22🎜🎜🎜Offizielles Beispiel: 🎜rrreee🎜                                                   
  • Das obige ist der detaillierte Inhalt vonSwoole lernt asynchrones MySQL. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

    Stellungnahme:
    Dieser Artikel ist reproduziert unter:csdn.net. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen