মাইসকিলি বা পিডিও - কি কি উপকারিতা আছে? [বন্ধ]


342

আমাদের জায়গায় আমরা প্রস্তুত স্টেটমেন্ট এবং লেনদেন সহায়তা যেমন স্টাফ জন্য mysqli এবং PDO ব্যবহার মধ্যে বিভক্ত। কিছু প্রকল্প একটি ব্যবহার করে, কিছু অন্যটি। আমাদের আর কোনও আরডিবিএমএসে চলে যাওয়ার সামান্য বাস্তবসম্মত সম্ভাবনা নেই।

আমি পিডিও পছন্দ করি একক কারণে যে এটি প্রস্তুত বিবৃতিগুলির জন্য নামযুক্ত পরামিতিগুলিকে অনুমতি দেয় এবং আমি যতটা জানি সচেতন মাইসকলি তা করে না।

আমরা আমাদের প্রকল্পগুলিকে কেবল একটি পদ্ধতির ব্যবহারের জন্য একীভূত করার জন্য স্ট্যান্ডার্ড হিসাবে অন্যের তুলনায় কোনওটি বেছে নেওয়ার জন্য কী অন্য কোনও উপকারিতা এবং বিবাদ রয়েছে?


5
এই নিবন্ধটি কোনটি ব্যবহার করবেন তা চয়ন করতে সহায়তা করবে। আপনার কর্মক্ষমতা বিবেচনা করে এই সাহায্য করতে পারে আপনি বেছে নেওয়া হয়েছে।
রবি 404

3
এটি মজার বিষয় যে কত জন ব্যক্তি একটি প্রশ্নকে "গঠনমূলক নয়" উত্সাহিত করেছেন এবং তারা অভিনয় করেছেন। বিষয়টি হ'ল, পুরো থ্রেডটি অত্যন্ত গঠনমূলক - কোনও প্রশ্ন গঠনকারী কিনা তা বিচার করার সময় মডারেটরদের এটি বিবেচনায় নেওয়া উচিত?
মারালার

@ মারার আমি আপনার সাথে একমত! এটি আসলে স্ট্যাকওভারফ্লোতে সবচেয়ে বড় সমস্যা। দুর্দান্ত প্রশ্ন / আলোচনা সর্বদা বন্ধ থাকে।
স্লিক

উত্তর:


243

ঠিক আছে, আপনি অবজেক্ট ওরিয়েন্টড দিক, প্রস্তুত বিবৃতি, এটি একটি স্ট্যান্ডার্ড হয়ে যায় ইত্যাদি নিয়ে তর্ক করতে পারেন তবে আমি জানি যে বেশিরভাগ সময় কাউকে বোঝানো একজন ঘাতক বৈশিষ্ট্য নিয়ে আরও ভাল কাজ করে। সুতরাং এটি এখানে:

PDO এর সাথে একটি দুর্দান্ত জিনিস হ'ল আপনি কোনও তথ্যতে স্বয়ংক্রিয়ভাবে ইনজেকশন করে ডেটা আনতে পারবেন। আপনি যদি কোনও ওআরএম ব্যবহার করতে না চান (কারণ এটি কেবল একটি দ্রুত স্ক্রিপ্ট) তবে আপনি অবজেক্ট ম্যাপিংয়ের মতো করেন তবে এটি সত্যিই দুর্দান্ত:

class Student {

    public $id;
    public $first_name;
    public $last_name

    public function getFullName() {
        return $this->first_name.' '.$this->last_name
    }
}

try 
{
    $dbh = new PDO("mysql:host=$hostname;dbname=school", $username, $password)

    $stmt = $dbh->query("SELECT * FROM students");

    /* MAGIC HAPPENS HERE */

    $stmt->setFetchMode(PDO::FETCH_INTO, new Student);


    foreach($stmt as $student)
    {
        echo $student->getFullName().'<br />';
    } 

    $dbh = null;
}
catch(PDOException $e)
{
    echo $e->getMessage();
}

12
উপরোক্ত এবং এর মধ্যে পার্থক্য আছে $mysqliResult->fetch_object("student");কি?
অ্যান্ডি ফ্লেমিং

2
@ ই-সন্তুষ্ট নং, আমি পিএইচপি ব্যবহার করি। সর্বজনীন ক্ষেত্রগুলি এনক্যাপসুলেশন লঙ্ঘন করে, তাই AS A BEST PRACTICEএটি ঠিক ... lol :) গুগল সর্বজনীন ক্ষেত্রগুলি ব্যবহার করে না, কেবলমাত্র অ্যাক্সেসর রয়েছে: google-styleguide.googlecode.com/svn/trunk/…
ওজেড_২৪

6
@ ই-সন্তুষ্ট: লাফিয়ে পড়ার জন্য দুঃখিত তবে ভেরিয়েবলগুলি পরিবর্তিত হলে কী ঘটে তা নিয়ন্ত্রণ করতে ইচ্ছুক হলে গিটার এবং সেটটারগুলি প্রয়োজনীয়। অন্যথায় আপনি সরল আপনার বস্তুর অভ্যন্তরীণ অবস্থার গ্যারান্টি দিতে পারবেন না (এটি বিশেষত একটি সমস্যা যদি আপনার ভিতরে অন্য কোনও বস্তু থাকে)। এটি সম্পূর্ণরূপে ভাষা স্বাধীন। @ ওজেড_: সহজ করুন ব্যক্তিগত সমালোচনা কেবল অন্য কাউকে ডিফেন্সিভের উপরে রাখবে।
জেমস পি।

2
@ মোনাডিক: একমত মূল উপাদানগুলি বা জটিল বস্তুগুলি ইত্যাদির সাথে লেনদেন করার সময় অবশ্যই এনক্যাপসুলেশন একটি বৈধ তর্ক is অ্যারে, এটি গ্রহণযোগ্য। সিস্টেমের মাধ্যমে রেকর্ডগুলি ভাসমান হিসাবে এটি সহজ প্রকারের চেকিংয়ের অনুমতি দেয়।
ড্যান লাগেজ

15
@ আমি আশা করি আমি এখানে সংখ্যালঘুতে নেই, তবে নতুন বিকাশকারীদের প্রতি তাদের সুরক্ষার বিষয়ে উত্তরগুলি বিচার করা উচিত বলে আমি মনে করি না। কঠোর মনে হচ্ছে, তবে এটি সত্য। এসও-তে একটি উত্তরের উদ্দেশ্য কেবল অনুলিপি এবং পেস্ট কোড সরবরাহ করা নয়, পাশাপাশি বোঝাপড়াও সরবরাহ করা। প্রতিটি সুরক্ষা গর্ত বা প্যাটার্নের ত্রুটি একটি উদাহরণে আবৃত রয়েছে তা নিশ্চিত করা উত্তরদাতাদের কাজ নয়, কারণ আসুন আমরা এটির মুখোমুখি হই, কোডটি অনুলিপি করা হয় সেই অ্যাপ্লিকেশনটি একই কোড ব্যবহার করে অন্য প্রতিটি অ্যাপ্লিকেশন থেকে সহজাতভাবে পৃথক।
ম্যাটিগাবে

57

একটি ডাটাবেস থেকে অন্য ডাটাবেসে অ্যাপ্লিকেশন স্থানান্তর করা খুব সাধারণ বিষয় নয়, তবে খুব শীঘ্রই আপনি অন্য একটি আরডিবিএমএস ব্যবহার করে নিজেকে অন্য প্রকল্পে কাজ করতে দেখবেন। আপনি যদি পিডিও সহ বাড়িতে থাকেন তবে সেই সময়ে কমপক্ষে একটি জিনিস শিখতে কম হবে।

এ ছাড়া আমি PDO এপিআইকে আরও কিছুটা স্বজ্ঞাত মনে করি এবং এটি আরও সত্যিকারের অবজেক্ট ওরিয়েন্টেড বলে মনে হয়। mysqli মনে হয় এটি কেবলমাত্র একটি প্রক্রিয়াগত এপিআই যা আপত্তিজনক ছিল, যদি আপনি জানেন তবে আমার অর্থ কি। সংক্ষেপে, আমি PDO এর সাথে কাজ করা সহজ বলে মনে করি তবে এটি অবশ্যই বিষয়গত।


25

আমি PDO ব্যবহার শুরু করেছি কারণ আমার মতে বিবৃতি সমর্থনটি আরও ভাল। আমি একটি অ্যাক্টিভেকর্ড-এস্কে ডেটা অ্যাক্সেস স্তর ব্যবহার করছি এবং গতিশীলভাবে উত্পন্ন বিবৃতিগুলি প্রয়োগ করা অনেক সহজ। মাইএসকিউএলির প্যারামিটার বাইন্ডিংটি অবশ্যই একটি একক ফাংশন / পদ্ধতি কলের মধ্যে সম্পন্ন করতে হবে, তাই আপনি যদি রানটাইম পর্যন্ত জানেন না যে আপনি কতগুলি পরামিতি বাঁধতে চান, আপনি ব্যবহার করতে বাধ্য হবেনcall_user_func_array() (আমি বিশ্বাস করি যে এটি সঠিক ফাংশনের নাম) । এবং সাধারণ গতিশীল ফলাফল বাইন্ডিং সম্পর্কে ভুলে যান।

সর্বোপরি, আমি পিডিও পছন্দ করি কারণ এটি বিমূর্তনের একটি খুব যুক্তিসঙ্গত স্তর। এটি সম্পূর্ণ বিমূর্ত সিস্টেমে এটি ব্যবহার করা সহজ যেখানে আপনি এসকিউএল লিখতে চান না, তবে এটি আরও অনুকূলিত, খাঁটি ক্যোয়ারী সিস্টেমের সিস্টেম ব্যবহার করা বা দুটি মিশ্রিত করা এবং এটি মিলিয়ে নেওয়া সহজ করে তোলে।


2
গতিশীল উত্পন্ন ক্যোয়ারির সাথে ফলাফল বাঁধাই সম্ভব, আমরা আমাদের অ্যাপ্লিকেশনগুলিতে এটি করি। এটি তবে বিশাল ব্যথা is
পিম জাগার

17

PDO হ'ল স্ট্যান্ডার্ড, এটি বেশিরভাগ বিকাশকারীরা আশা করবেন। mysqli মূলত একটি নির্দিষ্ট সমস্যার একটি bespoke সমাধান ছিল, তবে এটি অন্যান্য ডিবিএমএস-নির্দিষ্ট গ্রন্থাগারগুলির সমস্ত সমস্যা রয়েছে। PDO হ'ল সমস্ত কঠোর পরিশ্রম এবং চতুর চিন্তাভাবনা যেখানে যাবে।


15

মনে রাখার জন্য এখানে আরও কিছু রয়েছে: আপাতত (পিএইচপি 5.2) পিডিও গ্রন্থাগারটি বগি । এটি অদ্ভুত বাগগুলি পূর্ণ। উদাহরণস্বরূপ: চলকটিতে একটি সংরক্ষণ করার আগে PDOStatementভেরিয়েবলটি unset()এক টন বাগ এড়াতে হবে । এগুলির বেশিরভাগ পিএইচপি 5.3-এ স্থির করা হয়েছে এবং এগুলি পিএইচপি 5.3 এ 2009 এর প্রথম দিকে মুক্তি পাবে যা সম্ভবত অন্যান্য অনেক বাগ থাকতে পারে। আপনি যদি কোনও স্থিতি প্রকাশ করতে চান এবং পিএইচপি 5.3 এর জন্য পিডিও ব্যবহার করতে চান তবে যদি আপনি সম্প্রদায়কে সহায়তা করতে চান তবে আপনার পিএইচপি 6.1 এর জন্য পিডিও ব্যবহার করার উপর ফোকাস করা উচিত।


2
আমি মনে করি যে PDO যে লাভগুলি অফার করে তা বাগগুলি বোঝার জন্য এবং কাজের জন্য উপযুক্ত। পিএইচপি নিজেই খুব উদ্বেগজনক বাগগুলিতে পূর্ণ, এমন কিছু যে আমরা এমনকি দক্ষতার সাথে কাজ করতে পারি না এবং এখনও এটি অনেকগুলি সুবিধা দেয় যা আমাদের অন্যান্য বিকল্পের পরিবর্তে এটি ব্যবহারের কারণ করে।
ব্রায়ান ওয়ারশা

11
আহ, আশ্চর্যজনক, আমি পিডিওর সাথে কোনও বাগ কখনও অনুভব করিনি। এবং আমি এটি অনেক ব্যবহার করি।
নিকিসি

মাইস্কুলির বাগ রয়েছে। সমস্ত সফ্টওয়্যার বাগ আছে।
বিল কারভিন

10

পিডিও সম্পর্কে আরেকটি উল্লেখযোগ্য (ভাল) পার্থক্য হ'ল এটির PDO::quote()পদ্ধতিটি স্বয়ংক্রিয়ভাবে সংলগ্ন উদ্ধৃতি যুক্ত করে, যেখানে mysqli::real_escape_string()(এবং সিমিলাররা) এটি করে না:

পিডিও :: কোট () ইনপুট স্ট্রিংয়ের চারপাশে কোট স্থাপন করে (যদি প্রয়োজন হয়) এবং অন্তর্নিহিত ড্রাইভারের জন্য উপযুক্ত একটি উদ্ধৃতি শৈলী ব্যবহার করে ইনপুট স্ট্রিংয়ের মধ্যে বিশেষ অক্ষরগুলি অতিক্রম করে।


8

আপনার ডেটাবেস জুড়ে লোড বিতরণের জন্য আপনি যদি প্রতিদিন মাস্টার এবং স্লেভ সংযোগ স্থাপন করতে পারেন তবে আপনার সাইট / ওয়েব অ্যাপ্লিকেশনটি সত্যই হয়ে উঠলে পিডিও স্কেল করা অনেক সহজ করে তুলবে, পিএইচপি মান হিসাবে PDO এ যাওয়ার দিকে এগিয়ে চলেছে।

PDO তথ্য

একটি ওয়েব অ্যাপ্লিকেশন স্কেলিং


6

মৃত্যুদন্ড কার্যকর করার গতি অর্থে মাইএসকিউএলি জিততে পারে তবে আপনি মাইএসকিউএলি ব্যবহার করে একটি ভাল মোড়ক না পাওয়া পর্যন্ত প্রস্তুত বিবৃতিগুলির সাথে সম্পর্কিত তার কাজগুলি ভয়াবহ।

খনিতে এখনও বাগ রয়েছে, তবে কেউ এটি চাইলে এটি এখানে

সংক্ষেপে, আপনি যদি একটি গতি লাভের সন্ধান করেন তবে মাইএসকিউএলই; আপনি যদি সহজেই ব্যবহার করতে চান তবে PDO।


2
গতি অর্থে, আপনি বেনমার্ক দিতে পারেন?
জুলিয়াস এফ

8
Jonathen রবসন এ দুই একটি শালীন গতি তুলনা করেছেন jonathanrobson.me/2010/06/mysqli-vs-pdo-benchmarks । সংক্ষিপ্তসার: inserts - প্রায় সমান, selects - মাইএসকিলি অ-প্রস্তুত বিবৃতিগুলির জন্য 2.5% faster দ্রুত / প্রস্তুত বিবৃতিগুলির জন্য ~ 6.7% দ্রুত। পারফরম্যান্সের জরিমানার পরিমাণ কত ছোট, প্রদত্ত বৈশিষ্ট্য এবং ব্যবহারের নমনীয়তা PDOসাধারণত পারফরম্যান্সের হিটকে ছাড়িয়ে যায়।
আদম

1
@ অ্যাডাম আমার ব্লগে লিঙ্ক করার জন্য ধন্যবাদ!
jnrbsn

@ ডেমনফায়ার300 এটি সত্য, মানদণ্ডের কোনও প্রয়োজন নেই। পিডিও মাইসক্লি লাইব্রেরি মোড়ল। আমি সম্ভবত ফ্যানকে হিট করব যদি কেউ প্রমাণ করতে পারে যে পিডিও মাইসকলির চেয়ে দ্রুত is :-D
ডায়ান

@ jnrbsn আপনি আদম যা বলেছিলেন তাতে তার সাথে কি একমত?
বাসিত

5

ব্যক্তিগতভাবে আমি পিডিও ব্যবহার করি তবে আমার মনে হয় এটি মূলত পছন্দের একটি প্রশ্ন।

PDO এর কিছু বৈশিষ্ট্য রয়েছে যা এসকিউএল ইঞ্জেকশনটিকে পুনরায় সহায়তা করে ( প্রস্তুত বিবৃতি) ) , তবে আপনি যদি নিজের এসকিউএল সম্পর্কে সতর্ক হন তবে আপনি এটিও মাইএসকিলি দিয়ে অর্জন করতে পারবেন।

অন্য ডাটাবেসে সরে যাওয়া পিডিও ব্যবহার করার এত কারণ নেই। যতক্ষণ আপনি "বিশেষ এসকিউএল বৈশিষ্ট্যগুলি" ব্যবহার করবেন না ততক্ষণ আপনি একটি ডিবি থেকে অন্য ডিবিতে স্যুইচ করতে পারেন। তবে আপনি যেমন "নির্বাচন করুন ... সীমাবদ্ধ 1" ব্যবহারের সাথে সাথে আপনি এমএস-এসকিউএল এ যেতে পারবেন না যেখানে এটি "নির্বাচন শীর্ষ 1 ..."। সুতরাং এটি যাইহোক সমস্যাযুক্ত।


22
মাইএসকিউলি বিবৃতি প্রস্তুত আছে।
টাওয়ার

5

সম্পাদিত উত্তর।

এই উভয় এপিআইর সাথে কিছু অভিজ্ঞতা থাকার পরে, আমি বলব যে এখানে 2 টি ব্লকিং স্তরের বৈশিষ্ট্য রয়েছে যা মাইসক্লিটিকে দেশীয় প্রস্তুত বিবৃতিগুলির সাথে ব্যবহারযোগ্য না করে তোলে।
এগুলি ইতিমধ্যে 2 টি দুর্দান্ত (এখনও আন্ডাররেটেড) উত্তরে উল্লেখ করা হয়েছিল:

  1. স্থানধারকের স্বেচ্ছাসেবী সংখ্যার সাথে মানগুলি বাঁধাই
  2. নিছক অ্যারে হিসাবে ডেটা ফেরানো

(উভয়ই এই উত্তরে উল্লেখ করেছেন )

কোনও কারণে মাইস্ক্লি দু'জনের সাথেই ব্যর্থ হয়েছিল।
আজকাল এটি দ্বিতীয়টির জন্য কিছুটা উন্নতি পেয়েছে ( get_result) ) তবে এটি কেবল মাইএসকিএলএন্ড ইনস্টলেশনগুলিতে কাজ করে, এর অর্থ আপনি আপনার স্ক্রিপ্টগুলিতে এই ফাংশনটির উপর নির্ভর করতে পারবেন না।

তবুও এটির আজও পর্যন্ত বাইন্ড-বাই-মান নেই।

সুতরাং, শুধুমাত্র একটি পছন্দ আছে: পিডিও

অন্যান্য সমস্ত কারণ, যেমন

  • নামকৃত স্থানধারক (এই সিনট্যাক্স চিনিটি ওভাররেটেড হয়)
  • বিভিন্ন ডাটাবেস সমর্থন করে (বাস্তবে এটি কেউ কখনও ব্যবহার করে না)
  • বস্তুতে আনুন (কেবল অকেজো সিনট্যাক্স চিনি)
  • গতির পার্থক্য (কিছুই নেই)

কোন উল্লেখযোগ্য গুরুত্ব নেই।

একই সাথে এই উভয় এপিআই-তে কিছু বাস্তব গুরুত্বপূর্ণ বৈশিষ্ট্য নেই , যেমন

  • সনাক্তকারী স্থানধারক
  • জটিল ডাটা টাইপগুলির জন্য স্থানধারককে গতিময় বাঁধনকে কম পরিশ্রমী করে তোলে
  • সংক্ষিপ্ত অ্যাপ্লিকেশন কোড।

সুতরাং, বাস্তব জীবনের প্রয়োজনগুলি cover াকতে, এটিকে এপিআইগুলির একটির উপর ভিত্তি করে ম্যানুয়ালি পার্সড স্থানধারক প্রয়োগ করে তাদের নিজস্ব বিমূর্ত গ্রন্থাগার তৈরি করতে হবে। এই ক্ষেত্রে আমি মাইসকলি পছন্দ করতাম কারণ এর বিমূর্ততা কম থাকে।


অবশেষে এমন কেউ আছেন যে জানে এবং জীবনের
ইহসান

4

আমার বেঞ্চমার্ক স্ক্রিপ্টে , প্রতিটি পদ্ধতি 10000 বার পরীক্ষা করা হয় এবং প্রতিটি পদ্ধতির মোট সময়ের পার্থক্য মুদ্রিত হয়। আপনার নিজের কনফিগারেশনে এটি করা উচিত, আমি নিশ্চিত ফলাফলগুলি পৃথক হবে!

এগুলি আমার ফলাফল:

  • " SELECT NULL" -> PGO()0.35 5 সেকেন্ডে দ্রুত
  • " SHOW TABLE STATUS" -> mysqli()~ 2.3 সেকেন্ড দ্বারা দ্রুত
  • " SELECT * FROM users" -> mysqli()৩৩ সেকেন্ডে দ্রুত faster

দ্রষ্টব্য: mysqli- এর জন্য -> fetch_row () ব্যবহার করে কলামের নামগুলি অ্যারেতে যুক্ত হবে না, আমি পিজিওতে এটি করার কোনও উপায় পাইনি। তবে আমি -> ফেচ_আরে () ব্যবহার করলেও মাইএসকিলি পিজিওর তুলনায় কিছুটা ধীর হলেও তবুও দ্রুত (সিলেক্ট নল বাদে)।


17
পিজিও কি? আর ৩৩ সেকেন্ডে দ্রুত ?! আমি বিশ্বাস করা খুব কঠিন মনে করি ...
অ্যালিক্স অ্যাক্সেল

3

পিডিওর একটি জিনিস মাইএসকিউএলআই না যে আমি সত্যই পছন্দ করি তা হ'ল পিডিওর একটি নির্দিষ্ট শ্রেণীর ধরণের (উদাঃ $pdo->fetchObject('MyClass')) এর বস্তু হিসাবে ফলাফল ফিরিয়ে দেওয়ার ক্ষমতা । মাইএসকিউএলই fetch_object()কেবল কোনও stdClassবস্তু ফেরত দেবে ।


19
প্রকৃতপক্ষে, আপনি ম্যানুয়ালি একটি শ্রেণি নির্দিষ্ট করতে পারেন: "বস্তু mysqli_result :: fetch_object ([স্ট্রিং $ শ্রেণি_নাম [, অ্যারে $ প্যারাম]])"। stdClass কেবল তখনই ব্যবহৃত হয় যদি আপনি কিছু নির্দিষ্ট না করেন।
অ্যান্ড্রয়েড

-4

মনে রাখতে হবে একটি জিনিস।

মাইসকলি fetch_assoc () ফাংশন সমর্থন করে না যা কলামের নামগুলি উপস্থাপন করে কীগুলি দিয়ে কলামগুলি ফিরিয়ে দেবে। এটি করার জন্য অবশ্যই আপনার নিজের ফাংশনটি লেখা সম্ভব, এটি খুব বেশি দীর্ঘ নয় তবে এটি লিখতে আমার খুব কষ্ট হয়েছিল (অবিশ্বাসীদের জন্য: যদি আপনার পক্ষে সহজ মনে হয় তবে কিছুটা সময় চেষ্টা করুন এবং ডন ' টি ঠকাই :))


4
আপনি কি ম্যানুয়াল চেষ্টা করেছিলেন? php.net/manual/en/mysqli-result.fetch-assoc.php
পর্যন্ত

2
দীর্ঘ সময় আগে বাস্তবায়ন করা হয়েছিল, তবে হ্যাঁ আমি ম্যানুয়ালটি পরীক্ষা করেছি। এটি প্রস্তুত বিবৃতি দিয়ে কাজ করে? আমি সন্দেহ ...
মাইকে

2
আসলে এটির একটি কৌতূহলীভাবে আংশিক সমর্থন রয়েছে। আপনি নিয়মিত ক্যোয়ারিতে অ্যারে আনতে পারেন তবে প্যারাম্যাট্রাইজড কোয়েরিতে নয়: -!
vlvaro González

1
স্পষ্টত ভুল যে কোনও উত্তর মুছবেন না কেন?
মজিদ ফৌলদপুর

2
@ মাজিদফৌলদপুর - উত্তরটি অবশ্যই ভুল নয় । এটি স্রেফ কিছু প্রসঙ্গ অনুপস্থিত। Mysqli সম্পূর্ণরূপে সাহসী অ্যারে পুনরুদ্ধার সমর্থন করে না
vlvaro González
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.