समस्या यह है कि 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 ऑब्जेक्ट को कभी भी थ्रेड ऑब्जेक्ट स्कोप में संग्रहीत नहीं किया जाता है, क्योंकि आपको केवल उस ऑब्जेक्ट स्कोप में स्टोर करना चाहिए जिसे आप साझा करना चाहते हैं, और चूंकि आप एक MySQLi कनेक्शन साझा नहीं कर सकते हैं, इसलिए इसे मेथड स्कोप में हेरफेर करना सबसे अच्छा है। ।
जीथब पर SQLWorker उदाहरण सहित कई उदाहरण हैं, आपको उन सभी को पढ़ना चाहिए।
आगे पढ़ने:https://gist.github.com/krakjoe/6437782