CodeIgniter Database Interaction

Web Development - কোডইগনাইটার (Codeigniter) -

CodeIgniter একটি শক্তিশালী ডাটাবেস লেয়ার সরবরাহ করে, যা সহজেই ডাটাবেসের সাথে যোগাযোগ করতে এবং ডেটা ম্যানিপুলেশন সম্পাদন করতে সহায়তা করে। ডাটাবেস ইন্টারঅ্যাকশনের জন্য এটি বিভিন্ন পদ্ধতি প্রদান করে, যেমন Query Builder, Raw SQL Queries, এবং Model Class


ডাটাবেস কনফিগারেশন

CodeIgniter-এ ডাটাবেস ব্যবহারের আগে ডাটাবেস কনফিগারেশন সেটআপ করতে হবে।

১. ডাটাবেস কনফিগারেশন ফাইল

ডাটাবেস কনফিগারেশন app/Config/Database.php ফাইলে থাকে। উদাহরণ:

public $default = [
    'DSN'      => '',
    'hostname' => 'localhost',
    'username' => 'root',
    'password' => '',
    'database' => 'your_database_name',
    'DBDriver' => 'MySQLi',
    'DBPrefix' => '',
    'pConnect' => false,
    'DBDebug'  => true,
    'charset'  => 'utf8',
    'DBCollat' => 'utf8_general_ci',
    'swapPre'  => '',
    'encrypt'  => false,
    'compress' => false,
    'strictOn' => false,
    'failover' => [],
    'port'     => 3306,
];

উপরে আপনার ডাটাবেসের তথ্য পূরণ করুন।


ডাটাবেস লোড করা

ডাটাবেস ব্যবহার করার জন্য Database Service লোড করতে হবে:

$db = \Config\Database::connect();

ডাটাবেস ইন্টারঅ্যাকশনের পদ্ধতি

১. Query Builder

CodeIgniter-এ Query Builder একটি সুবিধাজনক টুল, যা ডাটাবেস অপারেশনকে সহজ করে।

Insert Data
$data = [
    'name' => 'Product 1',
    'price' => 100,
];
$db->table('products')->insert($data);
Retrieve Data
$query = $db->table('products')->get();
$result = $query->getResult();
Update Data
$data = [
    'price' => 120,
];
$db->table('products')->where('id', 1)->update($data);
Delete Data
$db->table('products')->where('id', 1)->delete();

২. Raw SQL Queries

CodeIgniter-এ Raw SQL Queries ব্যবহার করা যায়।

Select Query
$query = $db->query('SELECT * FROM products');
$result = $query->getResult();
Insert Query
$db->query("INSERT INTO products (name, price) VALUES ('Product 2', 200)");
Update Query
$db->query("UPDATE products SET price = 150 WHERE id = 2");
Delete Query
$db->query("DELETE FROM products WHERE id = 2");

৩. Model Class

Model Class ব্যবহার করলে ডাটাবেস ইন্টারঅ্যাকশন আরও সহজ হয়।

Model তৈরি

app/Models/ProductModel.php ফাইলে একটি Model তৈরি করুন:

<?php

namespace App\Models;

use CodeIgniter\Model;

class ProductModel extends Model
{
    protected $table = 'products';
    protected $primaryKey = 'id';
    protected $allowedFields = ['name', 'price'];
}
Model ব্যবহার

Controller এ Model লোড করে ব্যবহার করুন:

$productModel = new \App\Models\ProductModel();

// Insert
$productModel->save(['name' => 'Product 3', 'price' => 300]);

// Retrieve
$products = $productModel->findAll();

// Update
$productModel->update(3, ['price' => 350]);

// Delete
$productModel->delete(3);

Pagination ব্যবহার করে ডেটা দেখানো

CodeIgniter Pagination Library ব্যবহার করে ডেটা প্রদর্শন সহজ হয়।

Pagination সেটআপ

Controller-এ Pagination কনফিগার করুন:

$productModel = new \App\Models\ProductModel();
$data['products'] = $productModel->paginate(10); // প্রতি পৃষ্ঠায় ১০টি রেকর্ড
$data['pager'] = $productModel->pager;

return view('product_list', $data);

View-এ Pagination দেখানো

<?= $pager->links(); ?>

Transaction Management

CodeIgniter ডাটাবেসে Transaction পরিচালনার সুবিধা দেয়।

উদাহরণ:

$db->transStart();

$db->table('products')->insert(['name' => 'Product A', 'price' => 400]);
$db->table('products')->update(['price' => 450], ['id' => 1]);

$db->transComplete();

if ($db->transStatus() === false) {
    echo "Transaction Failed!";
} else {
    echo "Transaction Successful!";
}

ডাটাবেস ত্রুটি ডিবাগিং

CodeIgniter ডাটাবেস ত্রুটি ডিবাগিং সহজ করার জন্য DBDebug প্রদান করে। এটি app/Config/Database.php-এ সেট করা থাকে:

'DBDebug' => true,

ত্রুটি দেখার জন্য

if (!$db->table('products')->insert($data)) {
    print_r($db->error());
}

সারাংশ

  • CodeIgniter-এ ডাটাবেস ইন্টারঅ্যাকশন করতে Query Builder, Raw SQL Queries, এবং Model Class ব্যবহার করা যায়।
  • Pagination এবং Transaction Management CodeIgniter-কে আরও শক্তিশালী করে তোলে।
  • ডাটাবেস ত্রুটি ডিবাগিং এর মাধ্যমে সহজে সমস্যার সমাধান করা যায়।

এই বৈশিষ্ট্যগুলো CodeIgniter-কে ডাটাবেস ইন্টিগ্রেশনের জন্য একটি জনপ্রিয় ফ্রেমওয়ার্ক করে তুলেছে।

Content added By

Database Connectivity এবং Query বিল্ডার

CodeIgniter ডাটাবেস ম্যানেজমেন্ট সহজ এবং কার্যকর করতে একটি শক্তিশালী Database Connectivity এবং Query Builder সিস্টেম সরবরাহ করে। এটি ডাটাবেস সংযোগ, কুয়েরি এক্সিকিউশন, এবং ডেটা ম্যানিপুলেশনকে সহজতর করে।


ডাটাবেস কানেকশন (Database Connectivity)

১. ডাটাবেস কনফিগারেশন

CodeIgniter-এ ডাটাবেস সংযোগের জন্য app/Config/Database.php ফাইল ব্যবহার করা হয়।

উদাহরণ:
public $default = [
    'DSN'      => '',
    'hostname' => 'localhost',
    'username' => 'root',
    'password' => '',
    'database' => 'your_database_name',
    'DBDriver' => 'MySQLi',
    'DBPrefix' => '',
    'pConnect' => false,
    'DBDebug'  => (ENVIRONMENT !== 'production'),
    'charset'  => 'utf8',
    'DBCollat' => 'utf8_general_ci',
    'swapPre'  => '',
    'encrypt'  => false,
    'compress' => false,
    'strictOn' => false,
    'failover' => [],
    'port'     => 3306,
];
  • hostname: সার্ভারের ঠিকানা, যেমন localhost
  • username: ডাটাবেসের ইউজারনেম।
  • password: ডাটাবেসের পাসওয়ার্ড।
  • database: ডাটাবেসের নাম।
  • DBDriver: ডাটাবেস ড্রাইভার, যেমন MySQLi, Postgre, SQLite ইত্যাদি।

২. ডাটাবেস কানেকশন তৈরি

ডাটাবেস কানেকশন তৈরি করতে Model বা Database Library ব্যবহার করতে পারেন।

$db = \Config\Database::connect();

Query বিল্ডার (Query Builder) ব্যবহার

Query Builder CodeIgniter-এর একটি বিশেষ ফিচার, যা ডাটাবেস অপারেশন সহজ করতে সাহায্য করে। এটি SQL কুয়েরি লিখার প্রয়োজন কমিয়ে দেয়।


Query বিল্ডারের মেথডসমূহ

১. ডেটা ফেচ করা (Retrieving Data)

সব ডেটা রিট্রিভ
$query = $db->table('products')->get();
$result = $query->getResult();
নির্দিষ্ট কলাম রিট্রিভ
$query = $db->table('products')->select('name, price')->get();
$result = $query->getResult();
শর্ত অনুযায়ী ডেটা রিট্রিভ
$query = $db->table('products')->where('price >', 500)->get();
$result = $query->getResult();
লিমিট এবং অর্ডার যোগ করা
$query = $db->table('products')
            ->orderBy('price', 'DESC')
            ->limit(10)
            ->get();
$result = $query->getResult();

২. ডেটা ইনসার্ট করা (Inserting Data)

একক রেকর্ড ইনসার্ট
$data = [
    'name' => 'Product 1',
    'price' => 100,
    'description' => 'Product description'
];
$db->table('products')->insert($data);
একাধিক রেকর্ড ইনসার্ট
$data = [
    [
        'name' => 'Product 1',
        'price' => 100,
        'description' => 'Description 1'
    ],
    [
        'name' => 'Product 2',
        'price' => 200,
        'description' => 'Description 2'
    ]
];
$db->table('products')->insertBatch($data);

৩. ডেটা আপডেট করা (Updating Data)

নির্দিষ্ট রেকর্ড আপডেট
$data = [
    'price' => 150
];
$db->table('products')->where('id', 1)->update($data);
একাধিক রেকর্ড আপডেট
$data = [
    ['id' => 1, 'price' => 150],
    ['id' => 2, 'price' => 250],
];
$db->table('products')->updateBatch($data, 'id');

৪. ডেটা ডিলিট করা (Deleting Data)

নির্দিষ্ট রেকর্ড ডিলিট
$db->table('products')->where('id', 1)->delete();
সমস্ত রেকর্ড ডিলিট
$db->table('products')->truncate();

কাস্টম কুয়েরি চালানো

CodeIgniter-এ কাস্টম SQL কুয়েরি চালানোর সুবিধাও রয়েছে।

$query = $db->query("SELECT * FROM products WHERE price > 500");
$result = $query->getResult();

ফলাফল মেথড

Query থেকে ডেটা রিট্রিভ করার জন্য বিভিন্ন মেথড ব্যবহার করা যায়:

  • getResult(): অ্যারের মাধ্যমে ফলাফল প্রদান করে।
  • getRow(): একক রো রিটার্ন করে।
  • getResultArray(): অ্যাসোসিয়েটিভ অ্যারে প্রদান করে।

উদাহরণ:

$query = $db->table('products')->get();
$result = $query->getResultArray();

ডিবাগিং এবং লগিং

কোনো কুয়েরি চালানোর পর সর্বশেষ কুয়েরি দেখতে ব্যবহার করুন:

echo $db->getLastQuery();

এটি ডিবাগিং এবং সমস্যা সমাধানে সহায়ক।


সুবিধা

  1. সহজ ব্যবহার: SQL কুয়েরির পরিবর্তে সরাসরি বিল্ট-ইন মেথড ব্যবহার করা যায়।
  2. নিরাপত্তা: SQL ইনজেকশন প্রতিরোধ করে।
  3. পুনরায় ব্যবহারযোগ্য: ডাটাবেস ম্যানিপুলেশন দ্রুত এবং সহজ হয়।

CodeIgniter-এর Database Connectivity এবং Query Builder ডাটাবেস সম্পর্কিত কাজকে অত্যন্ত কার্যকর এবং সুরক্ষিত করে। ডাটাবেসের সঙ্গে কাজ করার জন্য এটি ডেভেলপারদের জন্য একটি সহজ এবং নির্ভরযোগ্য সমাধান।

Content added By

Data Insertion, Retrieval, Update এবং Delete (CRUD)

CRUD (Create, Read, Update, Delete) হলো ডাটাবেস পরিচালনার চারটি মৌলিক কাজ। CodeIgniter এর Model এবং Query Builder ক্লাস ব্যবহার করে সহজেই CRUD অপারেশন সম্পন্ন করা যায়।


প্রয়োজনীয় প্রস্তুতি

১. ডাটাবেস টেবিল তৈরি

ডাটাবেসে একটি টেবিল তৈরি করুন। উদাহরণস্বরূপ, products নামে একটি টেবিল তৈরি করা হলো:

CREATE TABLE products (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(100) NOT NULL,
    description TEXT,
    price DECIMAL(10, 2) NOT NULL
);

২. Model তৈরি

app/Models/ProductModel.php ফাইলে একটি Model তৈরি করুন:

namespace App\Models;

use CodeIgniter\Model;

class ProductModel extends Model
{
    protected $table = 'products';
    protected $primaryKey = 'id';
    protected $allowedFields = ['name', 'description', 'price'];
}

Data Insertion (Create)

Controller এ ডেটা ইনসার্ট

Controller থেকে ডেটা ইনসার্ট করতে Model এর save() মেথড ব্যবহার করুন:

namespace App\Controllers;

use App\Models\ProductModel;

class ProductController extends BaseController
{
    public function create()
    {
        $model = new ProductModel();

        $data = [
            'name' => 'Laptop',
            'description' => 'High-performance laptop',
            'price' => 1200.50
        ];

        $model->save($data);

        return "Data inserted successfully!";
    }
}

ফর্ম থেকে ডেটা ইনসার্ট

ফর্ম ডেটা গ্রহণ করে ইনসার্ট করতে:

public function create()
{
    $model = new ProductModel();

    $data = [
        'name' => $this->request->getPost('name'),
        'description' => $this->request->getPost('description'),
        'price' => $this->request->getPost('price')
    ];

    $model->save($data);

    return redirect()->to('/products');
}

Data Retrieval (Read)

সমস্ত ডেটা রিট্রিভ

Model এর findAll() মেথড ব্যবহার করে সমস্ত ডেটা রিট্রিভ করুন:

public function index()
{
    $model = new ProductModel();
    $data['products'] = $model->findAll();

    return view('product_list', $data);
}

নির্দিষ্ট ডেটা রিট্রিভ

find($id) মেথড ব্যবহার করে নির্দিষ্ট একটি রেকর্ড রিট্রিভ করা যায়:

public function show($id)
{
    $model = new ProductModel();
    $data['product'] = $model->find($id);

    return view('product_details', $data);
}

Data Update (Update)

Controller থেকে ডেটা আপডেট

Model এর update() মেথড ব্যবহার করে ডেটা আপডেট করুন:

public function update($id)
{
    $model = new ProductModel();

    $data = [
        'name' => 'Updated Laptop',
        'description' => 'Updated description',
        'price' => 1300.00
    ];

    $model->update($id, $data);

    return "Data updated successfully!";
}

ফর্ম থেকে ডেটা আপডেট

ফর্ম ডেটা গ্রহণ করে আপডেট করতে:

public function update($id)
{
    $model = new ProductModel();

    $data = [
        'name' => $this->request->getPost('name'),
        'description' => $this->request->getPost('description'),
        'price' => $this->request->getPost('price')
    ];

    $model->update($id, $data);

    return redirect()->to('/products');
}

Data Deletion (Delete)

Controller থেকে ডেটা ডিলিট

Model এর delete() মেথড ব্যবহার করে ডেটা ডিলিট করুন:

public function delete($id)
{
    $model = new ProductModel();
    $model->delete($id);

    return "Data deleted successfully!";
}

সমস্ত ডেটা ডিলিট

সমস্ত ডেটা ডিলিট করতে:

public function deleteAll()
{
    $model = new ProductModel();
    $model->truncate();

    return "All data deleted!";
}

উদাহরণ: CRUD এর জন্য View ফাইল

product_list.php (ডেটা প্রদর্শন)

<h1>Product List</h1>
<ul>
    <?php foreach ($products as $product): ?>
        <li>
            <?= $product['name']; ?> - $<?= $product['price']; ?>
            <a href="/product/edit/<?= $product['id']; ?>">Edit</a>
            <a href="/product/delete/<?= $product['id']; ?>">Delete</a>
        </li>
    <?php endforeach; ?>
</ul>

product_form.php (ডেটা ইনসার্ট/আপডেট)

<form action="/product/save" method="post">
    <label for="name">Name:</label>
    <input type="text" id="name" name="name" value="<?= old('name', $product['name'] ?? ''); ?>">

    <label for="description">Description:</label>
    <textarea id="description" name="description"><?= old('description', $product['description'] ?? ''); ?></textarea>

    <label for="price">Price:</label>
    <input type="text" id="price" name="price" value="<?= old('price', $product['price'] ?? ''); ?>">

    <button type="submit">Save</button>
</form>

CRUD এর সুবিধা

  1. ডেটা পরিচালনা সহজ: Model এবং Query Builder ব্যবহার করে ডেটা পরিচালনা সহজ হয়।
  2. কোড পুনরায় ব্যবহারযোগ্যতা: একবার Model তৈরি করলে CRUD অপারেশন সহজে করা যায়।
  3. ক্লিন এবং মডুলার কোড: Controller, Model এবং View আলাদা রাখার ফলে কোড সুসংগঠিত থাকে।

CodeIgniter এর CRUD অপারেশন ডাটাবেস পরিচালনা দ্রুত এবং কার্যকরী করে। উপরের পদ্ধতি অনুসরণ করে সহজেই আপনার অ্যাপ্লিকেশনে ডেটা ইনসার্ট, রিট্রিভ, আপডেট এবং ডিলিট করতে পারবেন।

Content added By

Complex Queries এবং Joins

CodeIgniter এর Query Builder Class ডাটাবেসের সাথে কাজ করার একটি শক্তিশালী এবং সহজ উপায় প্রদান করে। এটি সহজ এবং জটিল উভয় ধরনের কোয়েরি সম্পাদন করতে পারে। JOIN অপারেশন ব্যবহার করে একাধিক টেবিল থেকে ডেটা রিট্রিভ করা যায়।


Query Builder ব্যবহার করে Complex Query

CodeIgniter এর Query Builder দিয়ে আপনি ডেটাবেসের বিভিন্ন কাজ যেমন সিলেক্ট, ইনসার্ট, আপডেট এবং ডিলিট করতে পারেন। নিচে কয়েকটি উদাহরণ দেওয়া হলো।

সাধারণ Query

$builder = $db->table('users');
$query = $builder->get(); // SELECT * FROM users

নির্দিষ্ট কলাম সিলেক্ট করা

$builder = $db->table('users');
$builder->select('name, email');
$query = $builder->get(); // SELECT name, email FROM users

WHERE কন্ডিশন

$builder = $db->table('users');
$builder->where('status', 'active');
$query = $builder->get(); // SELECT * FROM users WHERE status = 'active'

ORDER BY এবং LIMIT

$builder = $db->table('users');
$builder->orderBy('created_at', 'DESC')->limit(10);
$query = $builder->get(); // SELECT * FROM users ORDER BY created_at DESC LIMIT 10

JOIN ব্যবহার করা

JOIN ব্যবহার করে একাধিক টেবিল থেকে ডেটা রিট্রিভ করা হয়।

INNER JOIN

$builder = $db->table('orders');
$builder->select('orders.id, orders.amount, users.name');
$builder->join('users', 'users.id = orders.user_id');
$query = $builder->get();

জেনারেট করা SQL:

SELECT orders.id, orders.amount, users.name
FROM orders
INNER JOIN users ON users.id = orders.user_id

LEFT JOIN

$builder = $db->table('orders');
$builder->select('orders.id, orders.amount, users.name');
$builder->join('users', 'users.id = orders.user_id', 'left');
$query = $builder->get();

জেনারেট করা SQL:

SELECT orders.id, orders.amount, users.name
FROM orders
LEFT JOIN users ON users.id = orders.user_id

RIGHT JOIN

$builder = $db->table('orders');
$builder->select('orders.id, orders.amount, users.name');
$builder->join('users', 'users.id = orders.user_id', 'right');
$query = $builder->get();

জেনারেট করা SQL:

SELECT orders.id, orders.amount, users.name
FROM orders
RIGHT JOIN users ON users.id = orders.user_id

Complex Query উদাহরণ

Aggregate Functions (SUM, COUNT, AVG)

$builder = $db->table('orders');
$builder->select('SUM(amount) as total_sales');
$query = $builder->get();

জেনারেট করা SQL:

SELECT SUM(amount) as total_sales FROM orders

Multiple Joins

$builder = $db->table('orders');
$builder->select('orders.id, orders.amount, users.name, products.title');
$builder->join('users', 'users.id = orders.user_id');
$builder->join('products', 'products.id = orders.product_id');
$query = $builder->get();

জেনারেট করা SQL:

SELECT orders.id, orders.amount, users.name, products.title
FROM orders
INNER JOIN users ON users.id = orders.user_id
INNER JOIN products ON products.id = orders.product_id

Subqueries

Subquery ব্যবহার

$subquery = $db->table('orders')->select('SUM(amount)')->where('user_id = users.id');
$builder = $db->table('users');
$builder->select('users.name, (' . $subquery . ') as total_spent');
$query = $builder->get();

জেনারেট করা SQL:

SELECT users.name, (SELECT SUM(amount) FROM orders WHERE user_id = users.id) as total_spent
FROM users

Group By এবং Having

Group By

$builder = $db->table('orders');
$builder->select('user_id, COUNT(id) as total_orders');
$builder->groupBy('user_id');
$query = $builder->get();

জেনারেট করা SQL:

SELECT user_id, COUNT(id) as total_orders
FROM orders
GROUP BY user_id

Having

$builder = $db->table('orders');
$builder->select('user_id, COUNT(id) as total_orders');
$builder->groupBy('user_id');
$builder->having('total_orders >', 5);
$query = $builder->get();

জেনারেট করা SQL:

SELECT user_id, COUNT(id) as total_orders
FROM orders
GROUP BY user_id
HAVING total_orders > 5

Raw SQL ব্যবহার

কখনো কখনো Query Builder ব্যবহার না করে সরাসরি Raw SQL কোড চালাতে হয়।

Raw Query চালানো

$query = $db->query("SELECT * FROM users WHERE status = 'active'");
$result = $query->getResult();

সেরা প্র্যাকটিস

  1. Query Builder ব্যবহার করুন: যতটা সম্ভব Query Builder ব্যবহার করুন, কারণ এটি সহজ এবং নিরাপদ।
  2. SQL ইনজেকশন রোধ করুন: Raw SQL ব্যবহার করার সময় ইনপুট স্যানিটাইজ করুন।
  3. Efficient Joins লিখুন: JOIN ব্যবহার করার সময় অপ্রয়োজনীয় কলাম নির্বাচন এড়িয়ে চলুন।
  4. Indexes নিশ্চিত করুন: ডাটাবেস টেবিলের ওপর সঠিক ইনডেক্স থাকলে Query Performance উন্নত হয়।

CodeIgniter এর Query Builder ব্যবহার করে Complex Query এবং JOIN পরিচালনা সহজ এবং কার্যকর। এর সাহায্যে আপনি ডাটাবেসের বিভিন্ন অপারেশন দ্রুত এবং নিরাপদে সম্পন্ন করতে পারবেন।

Content added By

Transactions এবং Stored Procedures

Transactions এবং Stored Procedures ডাটাবেস অপারেশন পরিচালনার জন্য ব্যবহৃত দুটি গুরুত্বপূর্ণ উপাদান। এগুলো একাধিক ডাটাবেস অপারেশন পরিচালনার সময় ডেটার সঠিকতা এবং সুরক্ষা নিশ্চিত করে। CodeIgniter ফ্রেমওয়ার্কে Transactions এবং Stored Procedures সহজে পরিচালনার জন্য বিভিন্ন টুল এবং মেথড সরবরাহ করা হয়েছে।


Transactions

Transactions কী?

Transaction হলো একাধিক ডাটাবেস অপারেশনকে একটি একক অপারেশন হিসেবে পরিচালনার একটি পদ্ধতি। যদি সমস্ত অপারেশন সফল হয়, তবে পরিবর্তনগুলো স্থায়ী হয় (commit)। আর যদি কোনো একটি অপারেশন ব্যর্থ হয়, তবে সবকিছু পূর্বাবস্থায় ফিরে যায় (rollback)।

CodeIgniter এ Transaction পরিচালনা

CodeIgniter এ Transactions পরিচালনার জন্য trans_start(), trans_complete(), trans_commit() এবং trans_rollback() মেথডগুলো ব্যবহার করা হয়।


Transaction উদাহরণ

১. সাধারণ Transaction
$this->db->trans_start(); // Transaction শুরু

$this->db->insert('accounts', ['name' => 'John', 'balance' => 5000]);
$this->db->update('accounts', ['balance' => 4000], ['id' => 2]);

$this->db->trans_complete(); // Transaction শেষ
  • যদি সমস্ত অপারেশন সফল হয়, তাহলে trans_complete() স্বয়ংক্রিয়ভাবে commit করবে।
  • ব্যর্থ হলে Transaction rollback হবে।

২. ম্যানুয়াল Transaction
$this->db->trans_begin(); // Transaction শুরু

$this->db->insert('accounts', ['name' => 'Doe', 'balance' => 3000]);
$this->db->update('accounts', ['balance' => 2000], ['id' => 3]);

if ($this->db->trans_status() === FALSE) {
    $this->db->trans_rollback(); // ব্যর্থ হলে Rollback
} else {
    $this->db->trans_commit(); // সফল হলে Commit
}

Transaction Methods

১. trans_start() এবং trans_complete()

  • সহজ Transaction পরিচালনার জন্য ব্যবহার করা হয়।
  • উদাহরণ:

    $this->db->trans_start();
    $this->db->insert('users', $data);
    $this->db->trans_complete();
    

২. trans_begin()

  • ম্যানুয়াল Transaction শুরু করার জন্য ব্যবহৃত হয়।
  • উদাহরণ:

    $this->db->trans_begin();
    

৩. trans_commit()

  • Transaction সফল হলে পরিবর্তনগুলো স্থায়ী করে।
  • উদাহরণ:

    $this->db->trans_commit();
    

৪. trans_rollback()

  • Transaction ব্যর্থ হলে পূর্বাবস্থায় ফেরত নিয়ে যায়।
  • উদাহরণ:

    $this->db->trans_rollback();
    

৫. trans_status()

  • Transaction সফল হয়েছে কিনা তা পরীক্ষা করার জন্য ব্যবহৃত হয়।
  • উদাহরণ:

    if ($this->db->trans_status() === FALSE) {
        // Rollback logic
    }
    

Stored Procedures

Stored Procedures কী?

Stored Procedure হলো ডাটাবেসে সংরক্ষিত এক বা একাধিক SQL কোয়েরির একটি সেট, যা নির্দিষ্ট কাজ সম্পাদনের জন্য ব্যবহার করা হয়। এটি ডাটাবেসে প্রি-কম্পাইলড থাকে এবং সরাসরি সার্ভার থেকে কার্যকর হয়, ফলে কর্মক্ষমতা বাড়ে।

CodeIgniter এ Stored Procedure ব্যবহারের পদ্ধতি

CodeIgniter এ Stored Procedure ব্যবহার করতে query() বা callable স্টেটমেন্ট ব্যবহার করা হয়।


Stored Procedure উদাহরণ

১. Stored Procedure তৈরি

MySQL-এ একটি Stored Procedure তৈরি করুন:

DELIMITER //
CREATE PROCEDURE GetUserById (IN userId INT)
BEGIN
    SELECT * FROM users WHERE id = userId;
END //
DELIMITER ;
২. CodeIgniter থেকে Stored Procedure কল করা

Stored Procedure কল করার জন্য query() মেথড ব্যবহার করা হয়:

$userId = 1;
$query = $this->db->query("CALL GetUserById(?)", [$userId]);

$result = $query->result();
print_r($result);

Input এবং Output Parameters

Input Parameter সহ Stored Procedure কল
$query = $this->db->query("CALL GetUserById(?)", [$userId]);
Output Parameter ব্যবহারের উদাহরণ
DELIMITER //
CREATE PROCEDURE GetTotalUsers (OUT total INT)
BEGIN
    SELECT COUNT(*) INTO total FROM users;
END //
DELIMITER ;

CodeIgniter থেকে কল:

$query = $this->db->query("CALL GetTotalUsers(@total)");
$result = $this->db->query("SELECT @total AS total");
print_r($result->row()->total);

Stored Procedures এবং Transactions এর সুবিধা

Stored Procedures এর সুবিধা

  1. পারফরম্যান্স বৃদ্ধি: সার্ভার-সাইডে সংরক্ষিত হওয়ায় দ্রুত কাজ করে।
  2. কোড পুনরায় ব্যবহারযোগ্যতা: একবার তৈরি করে বারবার ব্যবহার করা যায়।
  3. সিকিউরিটি: সরাসরি SQL কোয়েরি ব্যবহারের প্রয়োজন হয় না, যা SQL ইনজেকশন প্রতিরোধ করে।

Transactions এর সুবিধা

  1. ডেটা সুরক্ষা: ব্যর্থ হলে পূর্বাবস্থায় ফিরে যাওয়া সম্ভব।
  2. ডেটার সামঞ্জস্যতা: একাধিক অপারেশন একটি ইউনিট হিসাবে পরিচালিত হয়।
  3. ত্রুটির প্রতিরোধ: ব্যর্থ অপারেশন স্বয়ংক্রিয়ভাবে বাতিল হয়।

CodeIgniter এ Transactions এবং Stored Procedures একত্রে ব্যবহার করে শক্তিশালী, কার্যকর, এবং সুরক্ষিত ডাটাবেস অপারেশন নিশ্চিত করা যায়। এগুলো বড় মাপের অ্যাপ্লিকেশনের জন্য অত্যন্ত কার্যকর।

Content added By
Promotion