sql >> データベース >  >> RDS >> Mysql

PHPPthreads-mysqliを使用

    問題は、mysqliオブジェクトが複数のスレッドでの使用に適していないことです。開始するスレッドごとにMySQLiのインスタンスを作成する必要があるため、各スレッドには一意の接続があります。

    <?php
    define("SQLHOST", "localhost");
    define("SQLUSER", "root");
    define("SQLPASS", "");
    define("SQLDB",   "test");
    define("SQLPORT", 3306);
    define("SQLSOCK", "/var/lib/mysql/mysql.sock");
    
    class Mine extends Thread {
        public function run() {
            try {
                $my = new mysqli(SQLHOST, SQLUSER, SQLPASS, SQLDB, SQLPORT, SQLSOCK);
                if ($my) {
                    $result = $my->query("SHOW DATABASES;");
    
                    if (is_object($result)) {
                        while (($row = $result->fetch_assoc())) {
                            var_dump($row);
                        }
                    }
                }
            } catch(Exception $ex) {
                var_dump($ex);
            }
        }
    }
    
    $mine = new Mine();
    $mine->start();
    ?>
    

    収量

    array(1) {
      ["Database"]=>
      string(18) "information_schema"
    }
    array(1) {
      ["Database"]=>
      string(5) "mysql"
    }
    array(1) {
      ["Database"]=>
      string(18) "performance_schema"
    }
    array(1) {
      ["Database"]=>
      string(4) "test"
    }
    

    MySQLiオブジェクトはThreadsオブジェクトスコープに保存されないことに注意してください。共有するオブジェクトスコープにのみ保存する必要があり、MySQLi接続は共有できないため、メソッドスコープで操作するのが最適です。 。

    SQLWorkerの例を含め、githubには多くの例があります。それらすべてを読む必要があります。

    さらに読む: https://gist.github.com/krakjoe/6437782




    1. Mysql1ランダム行

    2. Empty($ _ POST)のデフォルト値を設定するにはどうすればよいですか?

    3. 販売データベースを持つことの利点は何ですか?

    4. 関数のパラメーターリストを取得する方法(関数を削除できるようにするため)