关于使用apache PHP作中间层Delphi接口程序1

中间层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];
}

?>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值