cfd-innovation / cfd-db-adapter
CFD-Innovation 数据库适配器
4.2.3
2024-07-12 16:08 UTC
Requires
- php: >=7.1
Suggests
- ext-ibm_db2: Afin de pouvoir utiliser le connecteur DB2
- ext-mysqli: Afin de pouvoir utiliser le connecteur MySQL
- ext-pdo: Afin de pouvoir utiliser le connecteur PDO
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');
非常重要,必须为提供的每个表完全前缀