定制 cfd-innovation/cfd-db-adapter 二次开发

按需修改功能、优化性能、对接业务系统,提供一站式技术支持

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

cfd-innovation/cfd-db-adapter

Composer 安装命令:

composer require cfd-innovation/cfd-db-adapter

包简介

Adaptateur de base de données par CFD-Innovation

README 文档

README

Boîte à outils CFD-Innovation

CFD_DB_ADAPTER

Classe permettant de switch entre une base de données DB2, MySQL ou tout autre connecteur supporté par PDO

Prérequis

  • DB2 : ext-ibm_db2
  • MySQL : ext-mysqli
  • PDO : ext-pdo

Types de connecteurs disponibles

  • mysql
  • db2
  • pdo
    • ODBC
    • SqlSrv
    • DBLib

Exemples :

Utilisation de différents connecteurs :

// MySQL
$db = FactoryAdapter::getInstance("mysql", "localhost", "user", "password", "dbname");
// DB2
$db = FactoryAdapter::getInstance("db2", "*LOCAL", "user", "password", "dbname", 1);
// odbc
$db = FactoryAdapter::getInstance("pdo", "odbc:{Driver=IBM i Access ODBC Driver};System=*LOCAL;CCSID=1208;DBQ=qiws;NAM=1", "user", "password");
// sqlsrv
$db = FactoryAdapter::getInstance("pdo", "sqlsrv:Server=localhost\SQLEXPRESS", "user", "password");
// dblib
$db = FactoryAdapter::getInstance("pdo", "dblib:host=localhost;dbname=testdb", "user", "password");

Utilisation simple :

<?php

use CFDInnovation\CFD_DB_ADAPTER\FactoryAdapter;

require 'vendor/autoload.php';

try {
// Instanciation du connecteur de base de données
    $db = FactoryAdapter::getInstance("pdo", "host", "user", "password", "qiws", 1);
// Récupération et affichage de tous les clients
    $customers = $db->execRequest('SELECT * FROM qcustcdt', true);
    foreach ($customers as $customer) {
        echo "Nom du client : ".$customer['lstnam']."<br>";
        echo "Ville du client : ".$customer['city']."<br>";
    }
// Récupération et affichage des détails d'un client à partir de son identifiant'
    $cusnum = "938472";
    $customer = $db->prepareRequest('SELECT * FROM qcustcdt WHERE CUSNUM = ?', [$cusnum], true);
    echo "Nom du client : ".$customer[0]['lstnam']."<br>";
    echo "Ville du client : ".$customer[0]['city']."<br>";
    echo "Adresse du client : ".$customer[0]['street']."<br>";
    echo "Code postal du client : ".$customer[0]['zipcod']."<br>";
} catch (Exception | Error $e) {
    var_dump($e);
}

Pour récupérer un connecteur :

$db = FactoryAdapter::getInstance(DB_TYPE, DB_HOST, DB_LOGIN, DB_PWD, DB_NAME, 1);

Ensuite Il est possible d'envoyer une requête simple via la fonction :

// "QUERY" = requête sans paramètre à executer
// true = booléen indiquant si l'on attend un résultat ou non suite à l'exécution de la requête
$db->execRequest("QUERY", true);

Ou une requête préparée :

// "QUERY" = requête avec paramètres (?) à executer
// Tableau contenant les paramètres ainsi que leurs noms
// true = booléen indiquant si l'on attend un résultat ou non suite à l'exécution de la requête
$db->prepareRequest("QUERY", [$param_value], true);

Appel de procédure stockée

// "QUERY" = requête afin d'exécuter la procédure stockée
// Tableau contenant les paramètres ainsi que leurs noms et leurs types
// true = booléen indiquant si l'on attend un résultat ou non suite à l'exécution de la procédure stockée
$result = $db->callProc("call myStoredProc(?, ?)", [['name'=>'id_article', "value"=>'56', 'type'=>'in'], ['name'=>'sortie', "value"=>'', 'type'=>'out']], true)

Récupération du dernier ID créé

$lastInsertedId = $db->getLastId();

Gestion des transactions

// le booléen n'est utile que sous db2, sinon la commande START TRANSACTION; est exécutée
$db->autoCommit($bool);
// Commit 
$db->commit();
// Rollback
$db->rollback();

Récupération du dernier ID enregistré

// Si pas ODBC
$lastId = $db->getLastId();
// Si ODBC
$lastId = $db->getLastId($columnName, $table);

Récupération des informations de la structure d'une base de données

Récupération des informations d'une table

$tableInfos = $db->getTableInfos($tableName);

Récupération de la liste des schémas

$tableInfos = $db->getDatabases($dbType);

Cette fonction demande en paramètre le type de distribution de base de données si l'on passe par une connexion pdo. Par exemple si l'ont créé une connexion pdo_odbc, la distribution derrière pourrait être du mysql, db2, sqlsrv, etc...

Les distributions de base de données supportées ainsi que leurs mots-clés :

  • Pour PDO
    • db2
    • sqlsrv
    • dblib

Pour récupérer la liste des schémas d'une base de données db2 par exemple :

$dbType = 'db2';
$tableInfos = $db->getDatabases($dbType);

Récupération de la liste des tables d'un schéma

$tableInfos = $db->getTablesFromDatabase(['qiws', 'qwqcent'], 'db2');

Récupération de la liste des colonnes d'une table d'un schéma

$tableInfos = $db->getTablesFromDatabase(['qwqcent.orders', 'qwqcent.inventory'], 'db2');

Il est très important de préfixer complètement chaque table fournie

cfd-innovation/cfd-db-adapter 适用场景与选型建议

cfd-innovation/cfd-db-adapter 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 732 次下载、GitHub Stars 达 1, 最近一次更新时间为 2022 年 03 月 04 日, 在 PHP 生态内属于活跃度较高的组件。

我们在过去多个企业项目中使用过 cfd-innovation/cfd-db-adapter 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。

围绕 cfd-innovation/cfd-db-adapter 我们能提供哪些服务?
定制开发 / 二次开发

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

BUG 修复 & 性能优化

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

项目外包 & 长期维护

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

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

统计信息

  • 总下载量: 732
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 1
  • 点击次数: 16
  • 依赖项目数: 0
  • 推荐数: 0

GitHub 信息

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

其他信息

  • 授权协议: MIT
  • 更新时间: 2022-03-04