Mysql
 sql >> база данни >  >> RDS >> Mysql

PHP Pthreads - с помощта на 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 връзка, най-добре е да го манипулирате в обхвата на метода .

В github има много примери, включително пример за SQLWorker, трябва да ги прочетете всичките.

Допълнително четене: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. Как да изчислим процентния растеж месец по месец в MySQL

  2. Как да свържете низове в MySQL с CONCAT()

  3. Предотвратяване на SQL инжектиране

  4. Стойност по подразбиране СЕГА от две колони на MySQL ГРЕШКА 1067

  5. Повреда на InnoDB в Xampp