nilsframework/nils-database 问题修复 & 功能扩展

解决BUG、新增功能、兼容多环境部署,快速响应你的开发需求

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

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 host et database non vides qui est utilisé. Pour SQLite, seul database est 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 PHPType PDO
intPDO::PARAM_INT
boolPDO::PARAM_BOOL
floatPDO::PARAM_STR
stringPDO::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

Driverconfig.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 statiqueDé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 我们能提供哪些服务?
定制开发 / 二次开发

基于 nilsframework/nils-database 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。

BUG 修复 & 性能优化

线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。

项目外包 & 长期维护

承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。

yvsm@zunyunkeji.com QQ:316430983 微信:yvsm316 西安尊云信息科技 · 专注 PHP / Go / 分布式系统研发

统计信息

  • 总下载量: 11
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 0
  • 点击次数: 29
  • 依赖项目数: 5
  • 推荐数: 0

GitHub 信息

  • Stars: 0
  • Watchers: 0
  • Forks: 0
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2026-04-19