Workerman/MySQL
नोट
यह लाइब्रेरी अब मेंटेन नहीं की जाती है, illuminate/database या topthink/think-orm का उपयोग करना अनुशंसित है।
विवरण
मेमोरी में रहने वाले प्रोग्राम जब mysql का उपयोग करते हैं तो अक्सर mysql gone away त्रुटि का सामना करते हैं, यह तब होता है जब प्रोग्राम और mysql के बीच कनेक्शन लंबे समय तक संचार नहीं करता है, जिसके कारण कनेक्शन mysql सर्वर द्वारा काट दिया जाता है। यह डेटाबेस क्लास इस समस्या को हल कर सकती है, जब mysql gone away त्रुटि होती है, तो यह स्वचालित रूप से एक बार पुनः प्रयास करती है।
निर्भरता
यह mysql क्लास pdo और pdo_mysql दो एक्सटेंशन पर निर्भर करती है, यदि कोई एक्सटेंशन अनुपलब्ध है तो यह Undefined class constant 'MYSQL_ATTR_INIT_COMMAND' in .... त्रुटि दिखाएगी।
कमांड लाइन पर php -m चलाने से सभी php cli में स्थापित एक्सटेंशनों की सूची बनेगी, यदि pdo या pdo_mysql अनुपस्थित है, तो कृपया इसे स्थापित करें।
centos सिस्टम
PHP5.x
yum install php-pdo
yum install php-mysql
PHP7.x
yum install php70w-pdo_dblib.x86_64
yum install php70w-mysqlnd.x86_64
यदि पैकेज नाम नहीं मिल रहा है, तो कृपया yum search php mysql का उपयोग करें।
ubuntu/debian सिस्टम
PHP5.x
apt-get install php5-mysql
PHP7.x
apt-get install php7.0-mysql
यदि पैकेज नाम नहीं मिल रहा है, तो कृपया apt-cache search php mysql का उपयोग करें।
क्या उपरोक्त विधियाँ स्थापित नहीं कर रही हैं?
यदि उपरोक्त विधियाँ स्थापित नहीं हो रही हैं, तो कृपया workerman मैनुअल-परिशिष्ट-एक्सटेंशन इंस्टॉलेशन-विधि तीन स्रोत कोड संकलन इंस्टॉलेशन देखें।
Workerman/MySQL स्थापित करें
विधि 1:
आप composer के माध्यम से स्थापित कर सकते हैं, कमांड लाइन पर निम्नलिखित कमांड चलाएँ (composer का स्रोत विदेशी है, इस प्रक्रिया में बहुत समय लग सकता है)।
composer require workerman/mysql
उपरोक्त कमांड सफल होने पर vendor निर्देशिका उत्पन्न होगी, फिर अपने प्रोजेक्ट में vendor के अंतर्गत autoload.php को शामिल करें।
require_once __DIR__ . '/vendor/autoload.php';
विधि 2:
स्रोत कोड डाउनलोड करें, अनज़िप की गई निर्देशिका को अपने प्रोजेक्ट में रखकर सीधे स्रोत फ़ाइल को require करें।
require_once '/your/path/of/mysql-master/src/Connection.php';
नोट
यह अत्यधिक अनुशंसित है कि onWorkerStart कॉलबैक में डेटाबेस कनेक्शन प्रारंभ करें, Worker::runAll(); चलने से पहले कनेक्शन को प्रारंभ करने से बचें, क्योंकि Worker::runAll(); चलने से पहले प्रारंभ किया गया कनेक्शन मुख्य प्रक्रिया से संबंधित है, उप-प्रक्रिया उस कनेक्शन को विरासत में लेगी, मुख्य प्रक्रिया और उप-प्रक्रिया एक ही डेटाबेस कनेक्शन को साझा करेंगे जिससे त्रुटियाँ उत्पन्न हो सकती हैं।
उदाहरण
use Workerman\Worker;
use Workerman\Connection\TcpConnection;
require_once __DIR__ . '/vendor/autoload.php';
$worker = new Worker('websocket://0.0.0.0:8484');
$worker->onWorkerStart = function($worker)
{
// db उदाहरण को वैश्विक चर में स्टोर करना (किसी क्लास की स्थैतिक सदस्य में भी स्टोर कर सकते हैं)
global $db;
$db = new \Workerman\MySQL\Connection('host', 'port', 'user', 'password', 'db_name');
};
$worker->onMessage = function(TcpConnection $connection, $data)
{
// वैश्विक चर के माध्यम से db उदाहरण प्राप्त करें
global $db;
// SQL निष्पादित करें
$all_tables = $db->query('show tables');
$connection->send(json_encode($all_tables));
};
// वर्कर चलाएँ
Worker::runAll();
विशिष्ट MySQL/Connection उपयोग
// db कनेक्शन को प्रारंभ करें
$db = new \Workerman\MySQL\Connection('host', 'port', 'user', 'password', 'db_name');
// सभी डेटा प्राप्त करें
$db->select('ID,Sex')->from('Persons')->where('sex= :sex AND ID = :id')->bindValues(array('sex'=>'M', 'id' => 1))->query();
// समकक्ष
$db->select('ID,Sex')->from('Persons')->where("sex= 'M' AND ID = 1")->query();
// समकक्ष
$db->query("SELECT ID,Sex FROM `Persons` WHERE sex='M' AND ID = 1");
// एक पंक्ति डेटा प्राप्त करें
$db->select('ID,Sex')->from('Persons')->where('sex= :sex')->bindValues(array('sex'=>'M'))->row();
// समकक्ष
$db->select('ID,Sex')->from('Persons')->where("sex= 'M' ")->row();
// समकक्ष
$db->row("SELECT ID,Sex FROM `Persons` WHERE sex='M'");
// एक कॉलम डेटा प्राप्त करें
$db->select('ID')->from('Persons')->where('sex= :sex')->bindValues(array('sex'=>'M'))->column();
// समकक्ष
$db->select('ID')->from('Persons')->where("sex= 'F' ")->column();
// समकक्ष
$db->column("SELECT `ID` FROM `Persons` WHERE sex='M'");
// एकल मान प्राप्त करें
$db->select('ID')->from('Persons')->where('sex= :sex')->bindValues(array('sex'=>'M'))->single();
// समकक्ष
$db->select('ID')->from('Persons')->where("sex= 'F' ")->single();
// समकक्ष
$db->single("SELECT ID FROM `Persons` WHERE sex='M'");
// जटिल खोज
$db->select('*')->from('table1')->innerJoin('table2','table1.uid = table2.uid')->where('age > :age')->groupBy(array('aid'))->having('foo="foo"')->orderByASC/*orderByDESC*/(array('did'))
->limit(10)->offset(20)->bindValues(array('age' => 13));
// समकक्ष
$db->query('SELECT * FROM `table1` INNER JOIN `table2` ON `table1`.`uid` = `table2`.`uid`
WHERE age > 13 GROUP BY aid HAVING foo="foo" ORDER BY did LIMIT 10 OFFSET 20');
// सम्मिलित करें
$insert_id = $db->insert('Persons')->cols(array(
'Firstname'=>'abc',
'Lastname'=>'efg',
'Sex'=>'M',
'Age'=>13))->query();
समकक्ष
$insert_id = $db->query("INSERT INTO `Persons` ( `Firstname`,`Lastname`,`Sex`,`Age`)
VALUES ( 'abc', 'efg', 'M', 13)");
// अपडेट करें
$row_count = $db->update('Persons')->cols(array('sex'))->where('ID=1')
->bindValue('sex', 'F')->query();
// समकक्ष
$row_count = $db->update('Persons')->cols(array('sex'=>'F'))->where('ID=1')->query();
// समकक्ष
$row_count = $db->query("UPDATE `Persons` SET `sex` = 'F' WHERE ID=1");
// हटाएँ
$row_count = $db->delete('Persons')->where('ID=9')->query();
// समकक्ष
$row_count = $db->query("DELETE FROM `Persons` WHERE ID=9");
// लेन-देन
$db->beginTrans();
....
$db->commitTrans(); // या $db->rollBackTrans();