Heim php教程 PHP源码 PDO类的封装

PDO类的封装

May 25, 2016 pm 05:07 PM

PDO类的封装

1. PDO类.rar

PDO类的封装PDO类.rar

2. PHP代码 

<?php
/**
 * Created by tudou.
 * Date: 13-2-4
 * Time: 下午9:57
 */
/**
其他未实现的
1、绑定列到php变量请使用  $db->statement->bindColumn(1,$name);
*/
class pdo_class {
    private $pdo = null;
    public $statement = null;
    private $is_addsla = false;
    public $options = array(
        PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES ",
    );
    public function __construct($host,$user="root",$pass="",$dbname="",$persistent=false,$charset="utf8"){
        $this->options[PDO::MYSQL_ATTR_INIT_COMMAND] .= $charset;
        if($persistent){
            $this->options[PDO::ATTR_PERSISTENT] = true;
        }
        $dsn = "mysql:host={$host};dbname={$dbname}";
        $this->pdo = new PDO($dsn,$user,$pass,$this->options);
    }
    /**
    全局属性设置,包括:列名格式和错误提示类型    可以使用数字也能直接使用参数
    */
    public function setAttr($param,$val=&#39;&#39;){
        if(is_array($param)){
            foreach($param as $key=>$val){
                $this->pdo->setAttribute($key,$val);
            }
        }else{
            if($val!=&#39;&#39;){
                $this->pdo->setAttribute($param,$val);
            }else{
                return false;
            }
             
        }
    }
    /**
    生成一个编译好的sql语句模版 你可以使用 ? :name 的形式
    返回一个statement对象
    */
    public function prepare($sql=""){
        if($sql==""){
            return false;
        }
        $this->statement = $this->pdo->prepare($sql);
        return $this->statement;
    }
    /**
    执行Sql语句,一般用于 增、删、更新或者设置  返回影响的行数
    */
    public function exec($sql){
        if($sql==""){
            return false;
        }
        try{
            return $this->pdo->exec($sql);
        }catch(Exception $e){
            return $e->getMessage();
        }
         
    }
    /**
    执行有返回值的查询,返回PDOStatement  可以通过链式操作,可以通过这个类封装的操作获取数据
    */
    public function query($sql){
        if($sql=""){
            return false;
        }
        $this->statement = $this->pdo->query($sql);
        return $this->statement;
    }
    /**
    开启事务
    */
    public function beginTA(){
        return $this->pdo->beginTransaction();
    }
    /**
    提交事务
    */
    public function commit(){
        return $this->pdo->commit();
    }
    /**
    事务回滚
    */
    public function rollBack(){
        return $this->pdo->rollBack();
    }
    public function lastInertId(){
        return $db->lastInsertId();
    }
     
     
     
     
    //**   PDOStatement 类操作封装    **//
     
    /**
    让模版执行SQL语句,1、执行编译好的 2、在执行时编译
    */
    public function execute($param=""){ 
        if(is_array($param)){
            try{
                return $this->statement->execute($param);
            }catch (Exception $e){
                //return $this->errorInfo();
                return $e->getMessage();
            }
        }else{
            try{
                return $this->statement->execute();
            }catch(Exception $e){
                /* 返回的错误信息格式
                [0] => 42S22
                [1] => 1054
                [2] => Unknown column &#39;col&#39; in &#39;field list&#39;
                return $this->errorInfo();
                */
                return $e->getMessage();
            }
        }
    }
     
    /**
    参数1说明:
    PDO::FETCH_BOTH     也是默认的,两者都有(索引,关联)
    PDO::FETCH_ASSOC    关联数组
    PDO::FETCH_NUM      索引
    PDO::FETCH_OBJ          对象
    PDO::FETCH_LAZY     对象 会附带queryString查询SQL语句
    PDO::FETCH_BOUND    如果设置了bindColumn,则使用该参数
    */
    public function fetch($fetch_style=PDO::FETCH_BOTH){
        if(is_object($this->statement)){
            return $this->statement->fetch($fetch_style);
        }else{
            return false;
        }
    }
    /**
    参数1说明:
    PDO::FETCH_BOTH     也是默认的,两者都有(索引,关联)
    PDO::FETCH_ASSOC    关联数组
    PDO::FETCH_NUM      索引
    PDO::FETCH_OBJ          对象
    PDO::FETCH_COLUMN   指定列 参数2可以指定要获取的列
    PDO::FETCH_CLASS        指定自己定义的类
    PDO::FETCH_FUNC     自定义类 处理返回的数据
    PDO_FETCH_BOUND 如果你需要设置bindColumn,则使用该参数
    参数2说明:
    给定要处理这个结果的类或函数
    */
    public function fetchAll($fetch_style=PDO::FETCH_BOTH,$handle=&#39;&#39;){
        if($handle!=&#39;&#39;){
            return $this->statement->fetchAll($fetch_style,$handle);
        }else{
            return $this->statement->fetchAll($fetch_style);
        }
    }
    /**
    以对象形式返回 结果 跟fetch(PDO::FETCH_OBJ)一样
    */
    public function fetchObject($class_name){
        if($clss_name!=&#39;&#39;){
            return $this->statement->fetchObject($class_name);
        }else{
            return $this->statement->fetchObject();
        }
    }
     
    /**
    public function bindColumn($array=array(),$type=EXTR_OVERWRITE){
        if(count($array)>0){
            extract($array,$type);
        }
        //$this->statement->bindColumn()
    }
    */
     
    /**
    以引用的方式绑定变量到占位符(可以只执行一次prepare,执行多次bindParam达到重复使用的效果)
    */
    public function bindParam($parameter,$variable,$data_type=PDO::PARAM_STR,$length=6){
        return $this->statement->bindParam($parameter,$variable,$data_type,$length);
    }
     
    /**
    返回statement记录集的行数
    */
    public function rowCount(){
        return $this->statement->rowCount();
    }
    public function count(){
        return $this->statement->rowCount();
    }
     
     
    /**
    关闭编译的模版
    */
    public function close(){
        return $this->statement->closeCursor();
    }
    public function closeCursor(){
        return $this->statement->closeCursor();
    }
    /**
    返回错误信息也包括错误号
    */
    private function errorInfo(){
        return $this->statement->errorInfo();
    }
    /**
    返回错误号
    */
    private function errorCode(){
        return $this->statement->errorCode();
    }
     
     
     
    //简化操作
    public function insert($table,$data){
        if(!is_array($data)){
            return false;
        }
        $cols = array();
        $vals = array();
        foreach($data as $key=>$val){
            $cols[]=$key;
            $vals[]="&#39;".$this->addsla($val)."&#39;";
        }
        $sql  = "INSERT INTO {$table} (";
        $sql .= implode(",",$cols).") VALUES (";        
        $sql .= implode(",",$vals).")";
        return $this->exec($sql);
    }
    public function update($table,$data,$where=""){
        if(!is_array($data)){
            return false;
        }
        $set = array();
        foreach($data as $key=>$val){
            $set[] = $key."=&#39;".trim($this->addsla($val))."&#39;";
        }
        $sql = "UPDATE {$table} SET ";
        $sql .= implode(",",$set);
        $sql .= " WHERE ".$where;
        return $this->exec($sql);
    }
    public function delete($table,$where=""){
        $sql = "DELETE FROM {$table} WHERE ".$where;
        return $this->exec($sql);
    }
     
    private function addsla($data){
        if($this->is_addsla){
            return trim(addslashes($data));
        }
        return $data;
    }
}
Nach dem Login kopieren

           

以上就是PDO类的封装的内容,更多相关内容请关注PHP中文网(www.php.cn)!

       

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
2 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
2 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
2 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

TrendForce: Nvidias Blackwell-Plattformprodukte sorgen dafür, dass die CoWoS-Produktionskapazität von TSMC in diesem Jahr um 150 % steigt TrendForce: Nvidias Blackwell-Plattformprodukte sorgen dafür, dass die CoWoS-Produktionskapazität von TSMC in diesem Jahr um 150 % steigt Apr 17, 2024 pm 08:00 PM

Laut Nachrichten dieser Website vom 17. April hat TrendForce kürzlich einen Bericht veröffentlicht, in dem es davon ausgeht, dass die Nachfrage nach den neuen Blackwell-Plattformprodukten von Nvidia optimistisch ist und die gesamte CoWoS-Verpackungsproduktionskapazität von TSMC im Jahr 2024 voraussichtlich um mehr als 150 % steigen wird. Zu den neuen Blackwell-Plattformprodukten von NVIDIA gehören GPUs der B-Serie und GB200-Beschleunigerkarten, die NVIDIAs eigene GraceArm-CPU integrieren. TrendForce bestätigt, dass die Lieferkette derzeit sehr optimistisch in Bezug auf GB200 ist. Es wird geschätzt, dass die Auslieferungen im Jahr 2025 eine Million Einheiten überschreiten werden, was 40-50 % der High-End-GPUs von Nvidia ausmacht. Nvidia plant, in der zweiten Jahreshälfte Produkte wie GB200 und B100 auszuliefern, aber vorgelagerte Waferverpackungen müssen noch komplexere Produkte einführen.

Offengelegte AMD „Strix Halo' FP11-Gehäusegröße: entspricht Intel LGA1700, 60 % größer als Phoenix Offengelegte AMD „Strix Halo' FP11-Gehäusegröße: entspricht Intel LGA1700, 60 % größer als Phoenix Jul 18, 2024 am 02:04 AM

Diese Website berichtete am 9. Juli, dass die Prozessoren der AMD Zen5-Architektur „Strix“ über zwei Verpackungslösungen verfügen werden: Der kleinere StrixPoint wird das FP8-Paket verwenden, während der StrixHalo das FP11-Paket verwenden wird. Quelle: videocardz source @Olrak29_ Die neueste Enthüllung ist, dass die FP11-Gehäusegröße von StrixHalo 37,5 mm * 45 mm (1687 Quadratmillimeter) beträgt, was der LGA-1700-Gehäusegröße der AlderLake- und RaptorLake-CPUs von Intel entspricht. AMDs neueste Phoenix APU verwendet eine FP8-Gehäuselösung mit einer Größe von 25*40 mm, was bedeutet, dass StrixHalos F

Verpackungstechnologie und Anwendung in PHP Verpackungstechnologie und Anwendung in PHP Oct 12, 2023 pm 01:43 PM

Kapselungstechnologie und Anwendungskapselung in PHP sind ein wichtiges Konzept in der objektorientierten Programmierung. Sie beziehen sich auf die gemeinsame Kapselung von Daten und Operationen auf Daten, um eine einheitliche Zugriffsschnittstelle für externe Programme bereitzustellen. In PHP kann die Kapselung durch Zugriffskontrollmodifikatoren und Klassendefinitionen erreicht werden. In diesem Artikel werden die Kapselungstechnologie in PHP und ihre Anwendungsszenarien vorgestellt und einige spezifische Codebeispiele bereitgestellt. 1. Gekapselte Zugriffskontrollmodifikatoren In PHP wird die Kapselung hauptsächlich durch Zugriffskontrollmodifikatoren erreicht. PHP bietet drei Zugriffskontrollmodifikatoren:

Einführung in die Axios-Kapselung und gängige Methoden in Vue Einführung in die Axios-Kapselung und gängige Methoden in Vue Jun 09, 2023 pm 04:13 PM

Einführung in die Axios-Kapselung und gängige Methoden in Vue Axios ist eine auf Promise basierende HTTP-Bibliothek. Ihr Vorteil besteht in der guten Lesbarkeit, Benutzerfreundlichkeit und Skalierbarkeit. Als beliebtes Frontend-Framework bietet Vue auch volle Unterstützung für Axios. In diesem Artikel wird erläutert, wie Axios in Vue gekapselt wird, und es werden einige häufig verwendete Methoden von Axios vorgestellt. 1. Axios-Kapselung Während des Entwicklungsprozesses müssen wir häufig eine benutzerdefinierte Kapselung von Axios durchführen, z

Wie verbessern C++-Funktionen die Effizienz der GUI-Entwicklung durch Kapselung von Code? Wie verbessern C++-Funktionen die Effizienz der GUI-Entwicklung durch Kapselung von Code? Apr 25, 2024 pm 12:27 PM

Durch die Kapselung von Code können C++-Funktionen die Effizienz der GUI-Entwicklung verbessern: Code-Kapselung: Funktionen gruppieren Code in unabhängige Einheiten, wodurch der Code leichter zu verstehen und zu warten ist. Wiederverwendbarkeit: Funktionen schaffen gemeinsame Funktionalität, die anwendungsübergreifend wiederverwendet werden kann, wodurch Duplikate und Fehler reduziert werden. Prägnanter Code: Der gekapselte Code macht die Hauptlogik prägnant und einfach zu lesen und zu debuggen.

So implementieren Sie Kapselung und Vererbung in der Go-Sprache So implementieren Sie Kapselung und Vererbung in der Go-Sprache Jul 23, 2023 pm 08:17 PM

So implementieren Sie Kapselung und Vererbung in der Go-Sprache. Kapselung und Vererbung sind zwei wichtige Konzepte in der objektorientierten Programmierung. Sie können den Code modularer und wartbarer machen und auch die Wiederverwendung von Code erleichtern. In diesem Artikel wird die Implementierung von Kapselung und Vererbung in der Go-Sprache vorgestellt und entsprechende Codebeispiele bereitgestellt. Kapselung Kapselung dient dazu, Daten und Funktionen zu kapseln, Implementierungsdetails zu verbergen und nur notwendige Schnittstellen für die externe Verwendung verfügbar zu machen. In der Go-Sprache wird die Kapselung durch exportierte und nicht exportierte Bezeichner erreicht. Auf Bezeichner mit Großbuchstaben kann von anderen Paketen zugegriffen werden

Foxconn baut einen KI-One-Stop-Service auf und investiert in Sharp in den Einstieg in die fortschrittliche Halbleiterverpackung: Produktionsstart im Jahr 2026, ausgelegt für die Produktion von 20.000 Wafern pro Monat Foxconn baut einen KI-One-Stop-Service auf und investiert in Sharp in den Einstieg in die fortschrittliche Halbleiterverpackung: Produktionsstart im Jahr 2026, ausgelegt für die Produktion von 20.000 Wafern pro Monat Jul 18, 2024 pm 02:17 PM

Laut Nachrichten dieser Website vom 11. Juli berichtete die Economic Daily heute (11. Juli), dass die Foxconn Group in den Bereich Advanced Packaging eingestiegen sei und sich auf die aktuelle Mainstream-Halbleiterlösung Panel-Level Fan-out Packaging (FOPLP) konzentriert. 1. Nach seiner Tochtergesellschaft Innolux kündigte auch Sharp, an dem die Foxconn Group beteiligt ist, seinen Einstieg in den japanischen Bereich der Fan-out-Verpackung auf Panelebene an und wird voraussichtlich im Jahr 2026 in Produktion gehen. Die Foxconn Group selbst verfügt über ausreichend Einfluss im KI-Bereich und kann durch den Ausgleich ihrer Mängel bei der fortschrittlichen Verpackung „One-Stop“-Dienste anbieten, um die Annahme weiterer Bestellungen von KI-Produkten in Zukunft zu erleichtern. Laut öffentlichen Informationen auf dieser Website hält die Foxconn Group derzeit 10,5 % der Sharp-Aktien. Die Gruppe gab an, dass sie ihre Anteile zum jetzigen Zeitpunkt weder erhöhen noch reduzieren und ihre Anteile beibehalten wird.

Wie kann ein Fehler wegen schlechter Skalierbarkeit im Python-Code behoben werden? Wie kann ein Fehler wegen schlechter Skalierbarkeit im Python-Code behoben werden? Jun 25, 2023 am 09:51 AM

Als High-Level-Programmiersprache wird Python häufig in der Datenanalyse, beim maschinellen Lernen, in der Webentwicklung und in anderen Bereichen eingesetzt. Da jedoch die Größe des Codes immer größer wird, wird das Skalierbarkeitsproblem von Python-Programmen allmählich deutlich. Ein Fehler bei schlechter Skalierbarkeit bedeutet, dass sich das Python-Programm unter bestimmten Umständen nicht gut an geänderte Anforderungen anpassen und große Datenmengen nicht verarbeiten kann, was zu einer schlechten Programmleistung führt. Zu viele Abhängigkeiten, schlechte Codestruktur, fehlende Dokumentation usw. sind allesamt die Ursachen für Fehler aufgrund schlechter Skalierbarkeit in Python-Programmen.

See all articles