sql >> Databasteknik >  >> RDS >> Mysql

PHP Pthreads - med mysqli

Problemet är att mysqli-objektet är olämpligt för användning i flera trådar, du vill skapa en instans av MySQLi för varje tråd du startar, så varje tråd har en unik anslutning.

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

Avkastning

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

Observera att MySQLi-objektet aldrig lagras i Threads-objektomfånget, eftersom du bara ska lagra det som du tänker dela i objektomfånget, och eftersom du inte kan dela en MySQLi-anslutning är det bäst att manipulera det i metodomfånget .

Det finns många exempel på github, inklusive ett SQLWorker-exempel, du bör läsa dem alla.

Mer läsning:https://gist.github.com/krakjoe/6437782




  1. MYSQL-tabellskapande med standardvärde (uttryck) till en kolumn

  2. Inaktivera begränsning av främmande nyckel för Doctrine

  3. Fråga som returnerar en extra post. Några råd om hur man tar bort det från sökresultaten?

  4. Har någon kommit på hur man skalar Amazon RDS-läsrepliker?