PHPackages                             karan-safaie-qadi/pdo-module - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Database &amp; ORM](/categories/database)
4. /
5. karan-safaie-qadi/pdo-module

ActiveLibrary[Database &amp; ORM](/categories/database)

karan-safaie-qadi/pdo-module
============================

Secure PDO database connection module with environment support

v1.0.2(today)02↑2900%MITPHPPHP &gt;=7.4

Since Jun 19Pushed todayCompare

[ Source](https://github.com/Karan-Safaie-Qadi/PDO-Connection-Module)[ Packagist](https://packagist.org/packages/karan-safaie-qadi/pdo-module)[ Docs](https://github.com/Karan-Safaie-Qadi/PDO-Connection-Module)[ RSS](/packages/karan-safaie-qadi-pdo-module/feed)WikiDiscussions main Synced today

READMEChangelogDependencies (1)Versions (4)Used By (0)

ماژول اتصال به دیتابیس PDO
==========================

[](#ماژول-اتصال-به-دیتابیس-pdo)

یک ماژول امن، شی‌گرا و سبک برای اتصال به دیتابیس در پروژه‌های PHP.
این کتابخانه با استفاده از `PDO` و `vlucas/phpdotenv` ساخته شده و دو روش استفاده را پشتیبانی می‌کند:

- **متدهای استاتیک** (استفاده سریع و بدون کلاس جداگانه)
- **ارث‌بری** (ایجاد کلاس‌های `Model` برای مدیریت جداول)

---

ویژگی‌ها
--------

[](#ویژگی‌ها)

- اتصال امن با **Prepared Statements** (مقاوم در برابر SQL Injection)
- مدیریت متغیرهای محیطی با `.env` (مخفی‌سازی اطلاعات حساس)
- الگوی **Singleton** برای جلوگیری از اتصالات اضافی
- متدهای کمکی: `select`, `insert`, `update`, `delete`
- پشتیبانی از تراکنش‌ها: `beginTransaction`, `commit`, `rollBack`
- قابلیت استفاده به‌عنوان کتابخانه‌ی مجزا در هر پروژه
- مدیریت خطا با `PDOException`

---

نصب
---

[](#نصب)

برای نصب این کتابخانه در پروژه‌ی خود، از کامپوزر استفاده کنید:

```
composer require karan-safaie-qadi/pdo-module
```

---

پیکربندی
--------

[](#پیکربندی)

### ۱. ایجاد فایل `.env`

[](#۱-ایجاد-فایل-env)

در ریشه‌ی پروژه، فایل `.env` را با متغیرهای زیر ایجاد کنید:

```
DB_HOST=localhost
DB_PORT=3306
DB_NAME=your_database_name
DB_USERNAME=your_username
DB_PASSWORD=your_password
DB_CHARSET=utf8mb4
DB_DRIVER=mysql
```

### ۲. تنظیم مسیر ریشه

[](#۲-تنظیم-مسیر-ریشه)

چون کتابخانه در `vendor/` قرار می‌گیرد، مسیر ریشه را یک بار در ابتدای پروژه تنظیم کنید:

```
require_once __DIR__ . '/vendor/autoload.php';

use Database\Database;

Database::setRootPath(__DIR__);
```

---

نحوه‌ی استفاده
--------------

[](#نحوه‌ی-استفاده)

### روش اول: استفاده‌ی مستقیم (استاتیک)

[](#روش-اول-استفاده‌ی-مستقیم-استاتیک)

```
use Database\Database;

// دریافت تمام رکوردها
$users = Database::select('SELECT * FROM users WHERE age > ?', [18]);

// دریافت یک رکورد
$user = Database::selectOne('SELECT * FROM users WHERE id = ?', [1]);

// درج رکورد جدید
$newId = Database::insert('users', [
    'name' => 'علی رضایی',
    'email' => 'ali@example.com',
    'age' => 25
]);

// بروزرسانی
Database::update('users', ['age' => 26], ['id' => $newId]);

// حذف
Database::delete('users', ['id' => $newId]);

// کوئری دلخواه
$result = Database::execute('SELECT * FROM products WHERE status = ?', ['active']);
```

### روش دوم: استفاده از مدل‌ها (ارث‌بری)

[](#روش-دوم-استفاده-از-مدل‌ها-ارث‌بری)

#### ایجاد کلاس مدل

[](#ایجاد-کلاس-مدل)

```
namespace YourProject\Models;

use Models\Model;

class User extends Model
{
    protected string $table = 'users';
    protected string $primaryKey = 'id';

    // متد اختصاصی
    public static function findByEmail(string $email): ?array
    {
        return self::selectOne('SELECT * FROM users WHERE email = ?', [$email]);
    }
}
```

#### استفاده از مدل

[](#استفاده-از-مدل)

```
use YourProject\Models\User;

$allUsers = User::all();
$user = User::find(1);
$newId = User::create(['name' => 'مریم', 'email' => 'maryam@example.com']);
User::updateRecord($newId, ['status' => 'inactive']);
User::deleteRecord($newId);
$user = User::findByEmail('maryam@example.com');
```

---

تراکنش‌ها
---------

[](#تراکنش‌ها)

برای عملیات‌های اتمی از تراکنش استفاده کنید:

```
use Database\Database;

try {
    Database::beginTransaction();

    Database::insert('orders', ['user_id' => 1, 'total' => 100]);
    Database::update('users', ['balance' => 900], ['id' => 1]);

    Database::commit();
    echo "تراکنش موفق";
} catch (\PDOException $e) {
    Database::rollBack();
    echo "خطا: " . $e->getMessage();
}
```

---

مدیریت خطاها
------------

[](#مدیریت-خطاها)

تمامی متدها در صورت بروز خطا، استثنای `PDOException` را پرتاب می‌کنند:

```
try {
    $users = Database::select('SELECT * FROM non_existent_table');
} catch (\PDOException $e) {
    echo "خطای دیتابیس: " . $e->getMessage();
} catch (\Exception $e) {
    echo "خطای عمومی: " . $e->getMessage();
}
```

برای بررسی وضعیت اتصال:

```
if (Database::isConnected()) {
    echo "اتصال برقرار است.";
} else {
    echo "خطا: " . Database::getLastError();
}
```

---

مجوز
----

[](#مجوز)

این پروژه تحت مجوز **MIT** منتشر شده است.

---

ارتباط با توسعه‌دهنده
---------------------

[](#ارتباط-با-توسعه‌دهنده)

- **نویسنده:** Karan Safaie Qadi
- **گیت‌هاب:** [Karan-Safaie-Qadi/PDO-Connection-Module](https://github.com/Karan-Safaie-Qadi/PDO-Connection-Module)
- **پکیج در Packagist:** [karan-safaie-qadi/pdo-module](https://packagist.org/packages/karan-safaie-qadi/pdo-module)

---

---

---

PDO Database Connection Module
==============================

[](#pdo-database-connection-module)

A secure, object-oriented, and lightweight database connection module for PHP projects.
This library uses `PDO` and `vlucas/phpdotenv` and supports two usage methods:

- **Static methods** (quick and without separate classes)
- **Inheritance** (creating `Model` classes for table management)

---

Features
--------

[](#features)

- Secure connection with **Prepared Statements** (SQL Injection resistant)
- Environment variable management with `.env` (hiding sensitive info)
- **Singleton** pattern to prevent multiple connections
- Helper methods: `select`, `insert`, `update`, `delete`
- Transaction support: `beginTransaction`, `commit`, `rollBack`
- Can be used as a standalone library in any project
- Error handling with `PDOException`

---

Installation
------------

[](#installation)

To install this library in your project, run:

```
composer require karan-safaie-qadi/pdo-module
```

---

Configuration
-------------

[](#configuration)

### 1. Create `.env` file

[](#1-create-env-file)

In the project root, create a `.env` file with the following variables:

```
DB_HOST=localhost
DB_PORT=3306
DB_NAME=your_database_name
DB_USERNAME=your_username
DB_PASSWORD=your_password
DB_CHARSET=utf8mb4
DB_DRIVER=mysql
```

### 2. Set Root Path

[](#2-set-root-path)

Since the library resides in `vendor/`, set the root path once at the project bootstrap:

```
require_once __DIR__ . '/vendor/autoload.php';

use Database\Database;

Database::setRootPath(__DIR__);
```

---

Usage
-----

[](#usage)

### Method 1: Direct (Static) Usage

[](#method-1-direct-static-usage)

```
use Database\Database;

// Get all records
$users = Database::select('SELECT * FROM users WHERE age > ?', [18]);

// Get one record
$user = Database::selectOne('SELECT * FROM users WHERE id = ?', [1]);

// Insert new record
$newId = Database::insert('users', [
    'name' => 'Ali Rezaei',
    'email' => 'ali@example.com',
    'age' => 25
]);

// Update
Database::update('users', ['age' => 26], ['id' => $newId]);

// Delete
Database::delete('users', ['id' => $newId]);

// Custom query
$result = Database::execute('SELECT * FROM products WHERE status = ?', ['active']);
```

### Method 2: Using Models (Inheritance)

[](#method-2-using-models-inheritance)

#### Create a Model Class

[](#create-a-model-class)

```
namespace YourProject\Models;

use Models\Model;

class User extends Model
{
    protected string $table = 'users';
    protected string $primaryKey = 'id';

    // Custom method
    public static function findByEmail(string $email): ?array
    {
        return self::selectOne('SELECT * FROM users WHERE email = ?', [$email]);
    }
}
```

#### Using the Model

[](#using-the-model)

```
use YourProject\Models\User;

$allUsers = User::all();
$user = User::find(1);
$newId = User::create(['name' => 'Maryam', 'email' => 'maryam@example.com']);
User::updateRecord($newId, ['status' => 'inactive']);
User::deleteRecord($newId);
$user = User::findByEmail('maryam@example.com');
```

---

Transactions
------------

[](#transactions)

For atomic operations, use transactions:

```
use Database\Database;

try {
    Database::beginTransaction();

    Database::insert('orders', ['user_id' => 1, 'total' => 100]);
    Database::update('users', ['balance' => 900], ['id' => 1]);

    Database::commit();
    echo "Transaction successful";
} catch (\PDOException $e) {
    Database::rollBack();
    echo "Error: " . $e->getMessage();
}
```

---

Error Handling
--------------

[](#error-handling)

All methods throw `PDOException` on error:

```
try {
    $users = Database::select('SELECT * FROM non_existent_table');
} catch (\PDOException $e) {
    echo "Database error: " . $e->getMessage();
} catch (\Exception $e) {
    echo "General error: " . $e->getMessage();
}
```

Check connection status:

```
if (Database::isConnected()) {
    echo "Connected.";
} else {
    echo "Error: " . Database::getLastError();
}
```

---

License
-------

[](#license)

This project is released under the **MIT** license.

---

Contact
-------

[](#contact)

- **Author:** Karan Safaie Qadi
- **GitHub:** [Karan-Safaie-Qadi/PDO-Connection-Module](https://github.com/Karan-Safaie-Qadi/PDO-Connection-Module)
- **Packagist:** [karan-safaie-qadi/pdo-module](https://packagist.org/packages/karan-safaie-qadi/pdo-module)

###  Health Score

37

—

LowBetter than 81% of packages

Maintenance100

Actively maintained with recent releases

Popularity3

Limited adoption so far

Community6

Small or concentrated contributor base

Maturity35

Early-stage or recently created project

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~0 days

Total

3

Last Release

0d ago

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/288579950?v=4)[Karan Safaie Qadi](/maintainers/Karan-Safaie-Qadi)[@Karan-Safaie-Qadi](https://github.com/Karan-Safaie-Qadi)

---

Top Contributors

[![Karan-Safaie-Qadi](https://avatars.githubusercontent.com/u/288579950?v=4)](https://github.com/Karan-Safaie-Qadi "Karan-Safaie-Qadi (21 commits)")

### Embed Badge

![Health badge](/badges/karan-safaie-qadi-pdo-module/health.svg)

```
[![Health](https://phpackages.com/badges/karan-safaie-qadi-pdo-module/health.svg)](https://phpackages.com/packages/karan-safaie-qadi-pdo-module)
```

###  Alternatives

[tempest/framework

The PHP framework that gets out of your way.

2.2k31.1k12](/packages/tempest-framework)[aedart/athenaeum

Athenaeum is a mono repository; a collection of various PHP packages

245.2k](/packages/aedart-athenaeum)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
