首页 > 数据库 > MySQL > 正文

封装的PDO操作数据库的帮助类MySqlHelper

2020-03-22 19:18:02
字体:
来源:转载
供稿:网友
  • 封装的 PDO 操作数据库 的帮助类 MySqlHelper

    封装的 PDO 操作数据库 的帮助类 MySqlHelper ,仅供学习交流使用!

    <?php/** * Description of MySqlHelper * * @author fx678 */ html' target='_blank'>class MySqlHelper {    private static $pdoDB = null;        public function __destruct() {        $this->pdoDB = null;    }            /**     * 获取ini配置文件中PDO连接信息,并返回PDO对象     * $section: 数据库配置节点     * 返回 PDO对象     **/    private static function getPdoDB($section ="db"){        if(self::$pdoDB !== null && !array_key_exists($section,array('dsn','username','password'))){            if(!array_key_exists($section,self::$pdoDB)){                return self::$pdoDB;            }        }                   $config = Config::getConfig($section);        try {            self::$pdoDB = new PDO(                    $config['dsn'],                     $config['username'],                     $config['password'],                     array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'utf8';")            );            } catch (Exception $ex) {            throw new Exception('DB connection error:'.$ex->getMessage());        }                return self::$pdoDB;    }            /**     * 执行不带参数的查询语句     * $connectionString:数据库配置信息节点     * $strSql:要执行的T-sql 语句     * 返回 PDOStatement 对象     **/    public static function query($connectionString,$strSql){        try {           $statement = self::getPdoDB($connectionString)->query($strSql,PDO::FETCH_ASSOC);                      if($statement === false){               throw new Exception($this->getDB($connectionString)->errorInfo());           }        } catch (Exception $ex) {            throw new Execption($ex->getMessage());        }                return $statement;     }        /**     * 执行带参数的查询语句     * $connectionString:数据库配置信息节点     * $strSql:要执行的T-sql 语句     * $paramArr:参数数组     * 返回 PDOStatement 对象     **/    public static function queryParam($connectionString,$strSql,$paramArr){        try {            $statement = self::getPdoDB($connectionString)->prepare($strSql);                        //获取对应参数            if(isset($paramArr) && is_array($paramArr)){                foreach ($paramArr as $key => $val) {                    $statement->bindParam("$key",$val[0],$val[1]);                }            }                        //执行            $statement->execute();            } catch (Exception $ex) {            throw new Execption($ex->getMessage());        }                if($statement === false){            throw new Exception($this->getDB($connectionString)->errorInfo());        }                return $statement;    }            /**     * 执行带参数并使用事物机制的(增删改)语句     * $connectionString:数据库配置信息节点     * $strSql:要执行的T-sql 语句     * $paramArr:参数数组     * 返回 返回受影响的行数(int)     **/    public static function prepareParamTransaction($connectionString,$strSql,$paramArr){        $count = 0;                try {            $pdo = self::getPdoDB($connectionString);            //关闭自动提交(默认为自动提交)            $pdo ->setAttribute(PDO::ATTR_AUTOCOMMIT, 0);            //开启异常处理            $pdo -> setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);                         //开始事物            $pdo -> beginTransaction();                        //获取 Statement 对象            $statement = $pdo->prepare($strSql);                                       //获取对应参数            if(isset($paramArr) && is_array($paramArr)){                  foreach ($paramArr as $key => $val) {                      $statement->bindParam("$key",$val[0],$val[1]);                  }            }                        //执行            $statement -> execute();            $count = (int)($statement-> rowCount());                        //提交事物            $pdo -> commit();        } catch (Exception $ex){            throw new Execption($ex->getMessage());        }                if($statement === false){            throw new Exception($this->getPdoDB($connectionString)->errorInfo());        }                //返回受影响的行数        return $count;    }}?>
    调用参考示例1:

     $strSql = "SELECT * FROM NEWSINDEX n WHERE n.`Id`=:Id LIMIT 1;";                $paramArr = array(            ':Id' => array($Id,  PDO::PARAM_INT)        );                foreach (self::queryParam(self::$connectionString, $strSql, $paramArr) as $row) {            $model = new htNewsIndex();            HtNewsIndexMapper::map($model, $row);            return $model;        }                return null;
    调用参考示例2:
    $strSql = "INSERT INTO NEWS_INDEX(BSID,IDX_PERIOD,PREVIOUS_PRICE,ACTUAL_PRICE,REVISED_PRICE,SURVEY_PRICE,PUBLISH_TIME,CREATE_TIME,STATUS) "        . "VALUES(:BSId,:IdxPeriod,:PreviousPrice,:ActualPrice,:RevisedPrice,:SurveyPrice,:PublishTime,:CreateTime,:Status);";                //参数数组        $params = array(            ':BSId'           => array($model->getBSId(),PDO::PARAM_STR),            ':IdxPeriod'      => array($model->getIdxPeriod(),PDO::PARAM_STR),            ':PreviousPrice'  => array($model->getPreviousPrice(),PDO::PARAM_STR),            ':ActualPrice'    => array($model->getActualPrice(),PDO::PARAM_STR),            ':RevisedPrice'   => array($model->getRevisedPrice(),PDO::PARAM_STR),            ':SurveyPrice'    => array($model->getSurveyPrice(),PDO::PARAM_STR),            ':PublishTime'    => array($model->getPublishTime(),PDO::PARAM_STR),            ':CreateTime'     => array($model->getCreateTime(),PDO::PARAM_STR),            ':Status'         => array($model->getStatus(),PDO::PARAM_INT)        );                try {           return (int)self::prepareParamTransaction(self::$connectionString,$strSql,$params);        } catch (Exception $ex) {            throw new Exception($ex->getTraceAsString());        }

    由于认识有限,不足之处请多指教!
    在这个过程中,我发现使用 PDO 参数化模糊查询,始终没有结果,也没有异常抛出,如下语句:

    SELECT * FROM NEWS n WHERE n.`Title` LIKE('%:key%');
    SELECT * FROM NEWS n WHERE n.`Title` LIKE('%?%');
    这种参数化的模糊查询始终没有结果。请知情者赐教!

    PHP编程

    郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。

  • 发表评论 共有条评论
    用户名: 密码:
    验证码: 匿名发表