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