nilsframework/nils-database
最新稳定版本:1.0.0
Composer 安装命令:
composer require nilsframework/nils-database
包简介
Package de gestion de base de données pour NilsFramework — supporte MySQL, MariaDB, PostgreSQL et SQLite
README 文档
README
Package de gestion de base de données pour NilsFramework.
Supporte MySQL, MariaDB, PostgreSQL et SQLite via une API statique simple et cohérente.
📋 Table des matières
Installation
composer require nilsframework/nils-database
Configuration
Créez un fichier Configuration/config.json à la racine de votre projet :
{
"mysql": {
"driver": "mysql",
"host": "127.0.0.1",
"username": "root",
"password": "secret",
"database": "ma_base"
},
"mariadb": {
"driver": "mariadb",
"host": "",
"username": "",
"password": "",
"database": ""
},
"sqlite": {
"driver": "sqlite",
"database": "/chemin/vers/base.db"
},
"postgresql": {
"driver": "postgresql",
"host": "",
"username": "",
"password": "",
"database": ""
}
}
⚠️ Le driver actif est détecté automatiquement — c'est le premier bloc avec
hostetdatabasenon vides qui est utilisé. Pour SQLite, seuldatabaseest requis.
⚠️ Ne commitez jamais
config.json— ajoutez-le à votre.gitignore.
Config
Config::charger()
Charge le fichier de configuration JSON. Appelé automatiquement si nécessaire.
use Configuration\Config;
// Chargement explicite (optionnel)
Config::charger('Configuration/config.json');
// Chargement automatique — appelé implicitement par toutes les autres méthodes
Config::get('debug');
Config::get()
Retourne la valeur d'une clé de premier niveau.
$debug = Config::get('debug');
$appName = Config::get('app_name', 'Mon App'); // valeur par défaut si absente
Config::getSection()
Retourne une section entière du fichier de configuration.
$mysql = Config::getSection('mysql');
// [
// 'driver' => 'mysql',
// 'host' => '127.0.0.1',
// 'username' => 'root',
// 'password' => 'secret',
// 'database' => 'ma_base',
// ]
Config::getDatabaseConfig()
Retourne la configuration du driver de base de données actif (détection automatique).
$config = Config::getDatabaseConfig();
// Retourne la config du premier driver avec host + database non vides
Config::reinitialiser()
Réinitialise la configuration chargée. Utile pour les tests.
Config::reinitialiser();
Config::charger('Configuration/config.test.json');
Config::cheminFichier()
Retourne le chemin absolu du fichier de configuration chargé.
$chemin = Config::cheminFichier();
// /var/www/html/Configuration/config.json
Database
La classe Database fournit une API statique complète pour interagir avec la base de données.
La connexion est établie automatiquement à la première requête.
SELECT
Database::fetchAll()
Retourne toutes les lignes correspondant à la requête.
use Configuration\Database;
// Sans paramètres
$users = Database::fetchAll("SELECT * FROM utilisateurs");
// Avec paramètres nommés
$admins = Database::fetchAll(
"SELECT * FROM utilisateurs WHERE role = :role AND actif = :actif",
['role' => 'admin', 'actif' => true]
);
// Avec paramètres positionnels
$users = Database::fetchAll(
"SELECT * FROM utilisateurs WHERE age > ?",
[18]
);
// Résultat
// [
// ['id' => 1, 'nom' => 'Traore', 'role' => 'admin'],
// ['id' => 2, 'nom' => 'Diallo', 'role' => 'admin'],
// ]
Database::fetchOne()
Retourne une seule ligne ou null si aucun résultat.
// Par ID
$user = Database::fetchOne(
"SELECT * FROM utilisateurs WHERE id = :id",
['id' => 1]
);
if (!$user) {
// Aucun résultat
}
// Par email
$user = Database::fetchOne(
"SELECT * FROM utilisateurs WHERE email = :email",
['email' => 'traore@example.com']
);
// Résultat
// ['id' => 1, 'nom' => 'Traore', 'email' => 'traore@example.com']
INSERT
Database::insert()
Exécute un INSERT et retourne l'ID de la ligne insérée.
$id = Database::insert(
"INSERT INTO utilisateurs (nom, email, password) VALUES (:nom, :email, :password)",
[
'nom' => 'Traore',
'email' => 'traore@example.com',
'password' => password_hash('secret', PASSWORD_DEFAULT),
]
);
echo $id; // 42
UPDATE
Database::update()
Exécute un UPDATE et retourne le nombre de lignes modifiées.
$nbLignes = Database::update(
"UPDATE utilisateurs SET nom = :nom WHERE id = :id",
['nom' => 'Nouveau Nom', 'id' => 1]
);
echo $nbLignes; // 1
DELETE
Database::delete()
Exécute un DELETE et retourne le nombre de lignes supprimées.
$nbLignes = Database::delete(
"DELETE FROM utilisateurs WHERE id = :id",
['id' => 1]
);
echo $nbLignes; // 1
// Supprimer plusieurs lignes
$nbLignes = Database::delete(
"DELETE FROM sessions WHERE expire_at < :now",
['now' => date('Y-m-d H:i:s')]
);
Transactions
Les transactions permettent de grouper plusieurs opérations en une seule unité atomique.
Si une opération échoue, toutes les modifications sont annulées.
Database::debut()
Démarre une transaction.
Database::valider()
Valide et applique toutes les opérations de la transaction.
Database::annuler()
Annule toutes les opérations de la transaction en cours.
try {
Database::debut();
// Créer le cycle
$cycleId = Database::insert(
"INSERT INTO tnt_cycles (groupe_id, numero) VALUES (:groupe_id, :numero)",
['groupe_id' => 1, 'numero' => 3]
);
// Créer les cotisations pour chaque membre
foreach ($participations as $participation) {
Database::insert(
"INSERT INTO tnt_cotisations (cycle_id, participation_id, montant)
VALUES (:cycle_id, :participation_id, :montant)",
[
'cycle_id' => $cycleId,
'participation_id' => $participation['id'],
'montant' => 5000,
]
);
}
Database::valider();
} catch (\Throwable $e) {
Database::annuler();
throw $e;
}
Typage des paramètres
Le package infère automatiquement le type PDO selon la valeur PHP :
| Type PHP | Type PDO |
|---|---|
int | PDO::PARAM_INT |
bool | PDO::PARAM_BOOL |
float | PDO::PARAM_STR |
string | PDO::PARAM_STR |
Vous pouvez forcer le type via le troisième paramètre :
Database::fetchAll(
"SELECT * FROM users WHERE actif = :actif AND age > :age",
['actif' => 1, 'age' => 18],
['actif' => 'b', 'age' => 'i'] // b = bool, i = int, s = string, d = float
);
Drivers supportés
| Driver | config.json |
|---|---|
| MySQL | "driver": "mysql" |
| MariaDB | "driver": "mariadb" |
| PostgreSQL | "driver": "postgresql" |
| SQLite | "driver": "sqlite" |
Exceptions
Toutes les erreurs lèvent une DatabaseException qui étend HttpException (code 500) :
use Exception\DatabaseException;
try {
$user = Database::fetchOne("SELECT * FROM utilisateurs WHERE id = :id", ['id' => 1]);
} catch (DatabaseException $e) {
echo $e->getMessage(); // Message technique
echo $e->getUserMessage(); // "Erreur interne du serveur."
echo $e->getStatusCode(); // 500
}
| Méthode statique | Déclenchée quand |
|---|---|
DatabaseException::connexionEchouee() | La connexion PDO échoue |
DatabaseException::requeteEchouee() | Une requête SQL échoue |
DatabaseException::driverNonSupporte() | Le driver est inconnu |
DatabaseException::databaseException() | Cas générique |
Fermer la connexion
Database::fermer();
Licence
MIT — © NilsFramework
nilsframework/nils-database 适用场景与选型建议
nilsframework/nils-database 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 11 次下载、GitHub Stars 达 0, 最近一次更新时间为 2026 年 04 月 19 日, 在 PHP 生态内属于活跃度较高的组件。
我们在过去多个企业项目中使用过 nilsframework/nils-database 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。
基于 nilsframework/nils-database 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。
线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。
承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。
统计信息
- 总下载量: 11
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 0
- 点击次数: 29
- 依赖项目数: 5
- 推荐数: 0
其他信息
- 授权协议: MIT
- 更新时间: 2026-04-19