cfd-innovation/cfd-db-adapter

CFD-Innovation 数据库适配器

4.2.3 2024-07-12 16:08 UTC

This package is auto-updated.

Last update: 2024-09-12 14:33:09 UTC


README

CFD-Innovation 工具箱

CFD_DB_ADAPTER

一个类,允许在 DB2、MySQL 或任何 PDO 支持的连接器之间切换

要求

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

可用的连接器类型

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

示例

使用不同连接器的示例

// 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");

简单使用

<?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);
}

要获取一个连接器

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

然后可以通过函数发送一个简单请求

// "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);

或者一个预处理请求

// "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);

调用存储过程

// "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)

获取创建的最后 ID

$lastInsertedId = $db->getLastId();

事务管理

// 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();

获取最后记录的 ID

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

获取数据库结构的详细信息

获取表的信息

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

获取模式列表

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

此函数需要一个参数来指定通过 pdo 连接时数据库的分布类型。例如,如果创建了一个 pdo_odbc 连接,则后面的分布可能是 mysql、db2、sqlsrv 等...

支持的数据库分布及其关键词

  • 对于 PDO
    • db2
    • sqlsrv
    • dblib

例如,获取 db2 数据库模式列表

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

获取模式中表列表

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

获取模式中表列列表

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

非常重要,必须为提供的每个表完全前缀