Phalcon ফ্রেমওয়ার্কে SQL Query এবং Stored Procedures পরিচালনা করা বেশ সহজ এবং কার্যকরী। Phalcon এর ORM (Object-Relational Mapping) সিস্টেম সাধারণত ডাটাবেসের সাথে কাজ করার জন্য ব্যবহৃত হয়, তবে আপনি সরাসরি SQL Query এবং Stored Procedures ব্যবহার করেও ডেটাবেস অপারেশন সম্পন্ন করতে পারেন। এই গাইডে, আমরা Phalcon এ SQL Query এবং Stored Procedures কিভাবে ব্যবহার করতে হয় তা আলোচনা করব।
SQL Query ব্যবহার করা
Phalcon ফ্রেমওয়ার্কে SQL Query ব্যবহার করতে, আপনি Phalcon\Mvc\Model\Manager ক্লাসের মাধ্যমে বা Phalcon\Db\Adapter\Pdo ড্রাইভার ব্যবহার করে সরাসরি SQL কুয়েরি চালাতে পারেন।
১. Direct SQL Query ব্যবহার করা
Phalcon এর getDI() মেথডের মাধ্যমে ডাটাবেস অ্যাডাপ্টার (যেমন, PDO) এক্সেস করা যায় এবং SQL কুয়েরি এক্সিকিউট করা যায়।
উদাহরণ:
use Phalcon\Db\Adapter\Pdo\Mysql as DbAdapter;
class UsersController extends \Phalcon\Mvc\Controller
{
public function indexAction()
{
// ডাটাবেস অ্যাডাপ্টার তৈরি করা
$connection = $this->getDI()->get('db');
// SQL Query চালানো
$result = $connection->query("SELECT * FROM users");
// ফলাফল ফেচ করা
$users = $result->fetchAll();
// ফলাফল প্রিন্ট করা
print_r($users);
}
}
এখানে, আমরা query() মেথডের মাধ্যমে SQL কুয়েরি চালিয়েছি এবং fetchAll() মেথডের মাধ্যমে রেকর্ডগুলো রিটার্ন করেছি।
২. Prepared Statements ব্যবহার করা
Phalcon এর PDO ভিত্তিক ড্রাইভার SQL Injection প্রতিরোধে সাহায্য করে। প্রস্তুতকৃত বিবৃতিগুলি (prepared statements) ব্যবহার করে ডেটা ইনজেকশন এড়ানো যায়।
উদাহরণ:
use Phalcon\Db\Adapter\Pdo\Mysql as DbAdapter;
class UsersController extends \Phalcon\Mvc\Controller
{
public function showAction($id)
{
// ডাটাবেস অ্যাডাপ্টার তৈরি করা
$connection = $this->getDI()->get('db');
// প্রস্তুতকৃত বিবৃতি তৈরি করা
$sql = "SELECT * FROM users WHERE id = :id";
$result = $connection->query($sql, [
'id' => $id
]);
// ফলাফল ফেচ করা
$user = $result->fetch();
// ফলাফল প্রিন্ট করা
print_r($user);
}
}
এখানে, query() মেথডের মাধ্যমে SQL কুয়েরি চালানো হয়েছে এবং :id প্যারামিটারটিকে এক্সিকিউটের সময় নিরাপদভাবে পাস করা হয়েছে।
Stored Procedures ব্যবহার করা
Phalcon এ Stored Procedures ব্যবহার করতে, আপনি সরাসরি SQL কুয়েরি চালানোর মতোই Phalcon\Db\Adapter\Pdo এর মাধ্যমে Stored Procedure কল করতে পারেন। এতে ডেটাবেসের মধ্যে সংরক্ষিত কোনো প্রোগ্রামকে কল করা যায়।
১. Stored Procedure কল করা
উদাহরণ:
use Phalcon\Db\Adapter\Pdo\Mysql as DbAdapter;
class UsersController extends \Phalcon\Mvc\Controller
{
public function executeProcedureAction($userId)
{
// ডাটাবেস অ্যাডাপ্টার তৈরি করা
$connection = $this->getDI()->get('db');
// স্টোরড প্রোসিডিউর কল করা
$sql = "CALL getUserDetails(:userId)";
$result = $connection->query($sql, [
'userId' => $userId
]);
// ফলাফল ফেচ করা
$userDetails = $result->fetch();
// ফলাফল প্রিন্ট করা
print_r($userDetails);
}
}
এখানে, getUserDetails নামে একটি Stored Procedure কল করা হয়েছে, যেটি userId প্যারামিটার নেয় এবং ব্যবহারকারীর বিস্তারিত তথ্য ফেরত দেয়।
২. Stored Procedure এর আউটপুট হ্যান্ডলিং
যখন আপনি Stored Procedure কল করেন, তার আউটপুট প্রাপ্তির জন্য আপনি fetch() বা fetchAll() মেথড ব্যবহার করতে পারেন, তবে যদি কোনও আউটপুট না থাকে তবে শুধুমাত্র স্টেটাস কোড বা অন্যান্য রিটার্ন ভ্যালু ফেরত আসতে পারে।
উদাহরণ:
use Phalcon\Db\Adapter\Pdo\Mysql as DbAdapter;
class OrdersController extends \Phalcon\Mvc\Controller
{
public function getOrderDetailsAction($orderId)
{
// ডাটাবেস অ্যাডাপ্টার তৈরি করা
$connection = $this->getDI()->get('db');
// স্টোরড প্রোসিডিউর কল করা
$sql = "CALL getOrderDetails(:orderId)";
$result = $connection->query($sql, [
'orderId' => $orderId
]);
// আউটপুট ফেচ করা
$orderDetails = $result->fetchAll();
// ফলাফল প্রিন্ট করা
print_r($orderDetails);
}
}
এখানে, getOrderDetails নামক স্টোরড প্রোসিডিউর কল করা হয়েছে, যা orderId প্যারামিটার ব্যবহার করে সেই অর্ডারের বিস্তারিত তথ্য ফিরিয়ে দেবে।
সারাংশ
Phalcon ফ্রেমওয়ার্কে SQL Query এবং Stored Procedures ব্যবহার করা খুবই সহজ এবং কার্যকরী। আপনি Phalcon এর PDO অ্যাডাপ্টারের মাধ্যমে সরাসরি SQL কুয়েরি এক্সিকিউট করতে পারেন, এবং প্রস্তুতকৃত বিবৃতি ব্যবহার করে SQL ইনজেকশন থেকে রক্ষা পেতে পারেন। এর পাশাপাশি, Stored Procedures ব্যবহারের মাধ্যমে ডাটাবেসের মধ্যে সংরক্ষিত প্রোগ্রামগুলি কল করা সম্ভব, যা ডেটাবেস অপারেশনের কর্মক্ষমতা এবং নিরাপত্তা বৃদ্ধি করতে সহায়ক।
Read more