Masalahnya adalah objek mysqli tidak cocok untuk digunakan di banyak utas, Anda ingin membuat instance MySQLi untuk setiap utas yang Anda mulai, sehingga setiap utas memiliki koneksi unik.
<?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();
?>
Hasil
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"
}
Perhatikan bahwa, objek MySQLi tidak pernah disimpan dalam lingkup objek Threads, karena Anda hanya boleh menyimpan dalam lingkup objek yang ingin Anda bagikan, dan karena Anda tidak dapat berbagi koneksi MySQLi, yang terbaik adalah memanipulasinya dalam lingkup metode. .
Ada banyak contoh di github, termasuk contoh SQLWorker, Anda harus membaca semuanya.
Bacaan lebih lanjut:https://gist.github.com/krakjoe/6437782