中间层PHP 代码:
1.数据库接口,其中批量执行时事务处理没完成:dbconn.php
<?php
$DBConn=array();
// 数据库连接类
class DbHelpClass
{
private $conn;
function __construct($dbname)
{
$config_file_path = '../../DBSvrConfig.ini';
$dbparamstrs = $tmp = parse_ini_file($config_file_path, true)[$dbname];
$drvname=$dbparamstrs['DriverID'];
$sqlname=$dbparamstrs['Server'];
$sqldbname=$dbparamstrs['Database'];
$usrname=$dbparamstrs['User_Name'];
$usrpwd=$dbparamstrs['Password'];
if ($drvname==="MySQL"){
$port=$dbparamstrs['Port'];
$dsn ="mysql:host=$sqlname;port=$port;dbname=$sqldbname;";//charset=utf8";
} else {
$dsn ="sqlsrv:Server=$sqlname;Database=$sqldbname;";
}
try{
$this->conn = new PDO($dsn,$usrname,$usrpwd);
// $this->conn->setAttribute(PDO::ATTR_PERSISTENT,true);//设置数据库连接为持久连接
$this->conn->exec("set names 'utf8'");
}catch(PDOException $e){ $debuginfo=$debuginfo."\r\n"."connection fail(".$dsn.")".$e->getMessage()."\r\n";}
}
public function getquery_fieldinfo($stmt)
{
// $stmt = $this->conn->query($sqlstr);
$cc=$stmt->columnCount();
$fd=array();
$fds=array();
for($x=0;$x<$cc;$x++)
{
$fdinfo=$stmt->getColumnMeta($x);
if (isset($fdinfo["sqlsrv:decl_type"])){
$fdt=$fdinfo["sqlsrv:decl_type"];
} else {
$fdt=$fdinfo["native_type"];
}
$fd["fieldname"]=$fdinfo["name"];
$fd["fieldtype"]=$fdt;
$fd["len"]=$fdinfo["len"];
$fd["precision"]=$fdinfo["precision"];
//$fd[$fdt]=$fdinfo["name"];
$fds[]=$fd;
//$fds[]=json_encode($fdinfo);//$fdinfo["name"]."|".$fdinfo["native_type"]."|".$fdinfo["len"]."|".$fdinfo["precision"]."|".$fdinfo["pdo_type"]; // implode("|",$fdinfo);//
}
return $fds ;
}
/*SQL 查詢*/
public function getquery($sqlstr)
{
$stmt = $this->conn->query($sqlstr);
return $stmt ;
}
public function query_tojson($sqlstr)
{
$stmt = $this->getquery($sqlstr);
$dsarr=array();
$dsarr=$stmt->fetchAll(PDO::FETCH_ASSOC);
$querydata=array();
$querydata["field_data"]=$this->getquery_fieldinfo($stmt );
$querydata["row_data"]=$dsarr;//json_encode($stmt->fetchAll(PDO::FETCH_ASSOC),JSON_UNESCAPED_UNICODE);
$resultjson=json_encode($querydata,JSON_UNESCAPED_UNICODE);// implode('|',$querydata);
$stmt=null;
unset($dsarr);
unset($querydata);
return $resultjson;
}
/*執行 sql 指令*/
public function execsql($sqlstr)
{
$this->conn->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
// try
$affected = $this->conn->exec($sqlstr);// or die('sql error');
// }catch(PDOException $e){ $debuginfo=$debuginfo."\r\n"."Excel Sql fail(".$sqlstr.")".$e->getMessage()."\r\n";}
//$ss=iconv('GBK','UTF-8',$sqlstr);
return $affected ;
}
public function batch_execsql($sqlstrs)
{
$this->conn->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
$affected=0;
if (is_array($sqlstrs)) {
$cc=count($sqlstrs);
for($x=0;$x<$cc;$x++) {
$affected =$affected+ $this->conn->exec($sqlstrs[$x]);
}
}
return $affected ;
}
/* public function batch_execsql_transaction($sqlstrs)
{
$this->conn->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
if (is_array($sqlstrs)) {
$cc=count($sqlstrs);
try {
$this->conn->beginTransaction();
for($x=0;$x<$cc;$x++) {
$affected =$affected+ $this->conn->exec($sqlstrs[$x]);
}
$this->conn->commit();
} catch (Exception $e) {
$pdo->rollBack();// 回滚事务
// 输出报错信息
return "Failed: " . $e->getMessage(), PHP_EOL;
}
}
return $affected ;
} */
public function close(){
$this->conn = null;
}
}
/**
* 检查PDO连接是否可用
* @param Link $dbconn 数据库连接
* @return Boolean
*/
function pdo_ping($dbconn){
try{
$dbconn->getAttribute(PDO::ATTR_SERVER_INFO);
} catch (PDOException $e) {
if(strpos($e->getMessage(), 'MySQL server has gone away')!==false){
return false;
}
}
return true;
}
function getdbconn($dbname)
{
if (!isset($DBConn[$dbname])){
$DBConn[$dbname]= new DbHelpClass($dbname);
}
return $DBConn[$dbname];
}
?>