sql >> Databáze >  >> RDS >> Mysql

PHP Pthreads - pomocí mysqli

Problém je v tom, že objekt mysqli není vhodný pro použití ve více vláknech, chcete vytvořit instanci MySQLi pro každé vlákno, které spustíte, takže každé vlákno má jedinečné připojení.

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

Výtěžky

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

Všimněte si, že objekt MySQLi není nikdy uložen v rozsahu objektu Threads, protože do rozsahu objektu byste měli ukládat pouze to, co hodláte sdílet, a protože nemůžete sdílet připojení MySQLi, je nejlepší s ním manipulovat v rozsahu metody. .

Na githubu je mnoho příkladů, včetně příkladu SQLWorker, měli byste si je všechny přečíst.

Další čtení:https://gist.github.com/krakjoe/6437782




  1. Jak se připojím k databázi Oracle v R?

  2. Přímý přístup k SQL Server Database v Xamarin.Forms

  3. Aktualizace pole JSON nepřetrvávají v databázi

  4. Optimalizace dotazů na základě klastrovaných a neklastrovaných indexů v SQL?