Mysql
 sql >> Baza danych >  >> RDS >> Mysql

PHP Pthreads - używanie mysqli

Problem polega na tym, że obiekt mysqli nie nadaje się do użycia w wielu wątkach, chcesz utworzyć instancję MySQLi dla każdego uruchamianego wątku, więc każdy wątek ma unikalne połączenie.

<?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();
?>

Plony

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"
}

Zwróć uwagę, że obiekt MySQLi nigdy nie jest przechowywany w zakresie obiektu Threads, ponieważ należy przechowywać w zakresie obiektu tylko to, co zamierzasz udostępnić, a ponieważ nie możesz udostępnić połączenia MySQLi, najlepiej jest manipulować nim w zakresie metody .

Istnieje wiele przykładów na github, w tym przykład SQLWorker, powinieneś je wszystkie przeczytać.

Dalsza lektura:https://gist.github.com/krakjoe/6437782




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak ustawić parametry zapytania w MySQL Query Browser?

  2. Jak utworzyć plik CSV z bazy danych w Pythonie?

  3. Jak ograniczyć lub nadać priorytet zapytaniu w MySql

  4. Korzystanie z MariaDB z Entity Framework

  5. tomcat7:Nie można załadować klasy sterownika JDBC [com.mysql.jdbc.Driver]