数据库操作类的优点可以说非常多,共同的优点是易维护、复用、高效、安全,并且易于扩展。例如,PDO支持多种类型的数据库。与mysqli不同的是PDO还支持其他数据库,一套写法可以匹配多个数据库,而mysqli只支持mysql。代码db.php'mysql',//数据库类型'host'=>'localhost',//主机名'port'=>'3306',//默认端口'user'=>'root',//用户名'pass'=>'root',//密码'charset'=>'utf8',//默认字符集'dbname'=>'edu',//默认数据库];//新的主键IDpublic$insertId=null;//受影响的记录public$num=0;//单例模式,该类的实例privatestatic$instance=null;//数据库连接private$conn=null;/***Db构造方法*私有化防止外部实例化*/privatefunction__construct($params=[]){//初始化连接参数$this->dbConfig=array_merge($this->dbConfig,$params);//连接到数据库$this->connect();}/***禁止对该实例进行外部克隆*/privatefunction__clone(){//TODO:实现__clone()方法。}/***获取当前类的单个实例*/publicstaticfunctiongetInstance($params=[]){if(!self::$instanceinstanceofself){self::$instance=newself($params);}返回自我::$实例;}privatefunctionconnect(){try{//配置数据源DSN$dsn="{$this->dbConfig['db']}:host={$this->dbConfig['host']};port={$this->dbConfig['port']};dbname={$this->dbConfig['dbname']};charset={$this->dbConfig['charset']}";//创建PDO对象$this->conn=newPDO($dsn,$this->dbConfig['user'],$this->dbConfig['pass']);//设置客户端字符集$this->conn->query("SETNAMES{$this->dbConfig['charset']}");}catch(PDOException$e){die('数据库连接失败'.$e->getMessage());}}/***完成对数据表的操作:CURD*/publicfunctionexec($sql){$num=$this->conn->exec($sql);//如果有受影响的记录if($num>0){//如果是新操作,初始化新的主键id属性if(null!==$this->conn->lastInsertId()){$this->insertId=$this->conn->lastInsertId();}$this->num=$num;//返回受影响的记录}else{$error=$this->conn->errorInfo();//获取上次操作错误信息数组var_dump($error);}}//获取单个查询结果publicfunctionfetch($sql){return$this->conn->query($sql)->fetch(PDO::FETCH_ASSOC);}//获取多个查询结果publicfunctionfetchAll($sql){return$this->conn->query($sql)->fetchAll(PDO::FETCH_ASSOC);}}?>CallDemo.phpe??xec($sql);//echo''.$db->num.'记录插入成功,主键id为'.$db->insertId;//删除操作//$sql="DELETEFROMstudentWHEREid='4'";//$db->e??xec($sql);//echo'成功删除'.$db->num.'records';//更新操作//$sql="UPDATEstudentSETgrade='1199'WHEREid='1'";//$db->e??xec($sql);//echo'成功更新'.$db->num.'records';//查询单个操作//$sql="SELECTid,name,email,gradeFROMstudentWHEREgrade<'60'";//$row=$db->fetch($sql);//var_dump($row);////查询多个操作//$sql="SELECTid,name,email,gradeFROMstudentWHEREgrade>'80'";//$rows=$db->fetchAll($sql);//var_dump($rows);?>数据库表结构SQL选择以下所有SQL语句,粘贴到数据库管理工具的SQL执行框中执行,快速创建测试数据库--phpMyAdminSQL转储--版本4.8.5--https://www.phpmyadmin.net/--主机:localhost--生成日期:2022-08-0810:46:35--服务器版本:5.7。26--PHP版本:7.3.4SETSQL_MODE="NO_AUTO_VALUE_ON_ZERO";SETAUTOCOMMIT=0;STARTTRANSACTION;SETtime_zone="+00:00";/*!40101SET@OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT*/;/*!40101SET@OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS*/;/*!40101SET@OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION*/;/*!40101SETNAMESutf8mb4*/;---数据库:`edu`--------------------------------------------------------------表结构`student`--CREATETABLE`student`(`id`int(11)NOTNULL,`name`varchar(32)COLLATEutf8_unicode_ciNOTNULL,`email`textCOLLATEutf8_unicode_ciNOTNULL,`grade`varchar(32)COLLATEutf8_unicode_ciNOTNULL,`course`varchar(32)COLLATEutf8_unicode_ciNOTNULL)ENGINE=MyISAMDEFAULTCHARSET=utf8COLLATE=utf8_unicode_ci;----转储表`student中的数据`--插入`学生`(`id`,`name`,`email`,`grade`,`course`)VALUES(1,'王兴','meituan@qq.com','80','ruby'),(2,'黄郑','pdd@qq.com','68','mysql'),(6,'李彦宏','baidu@qq.com','95','python'),(5,'马云','mayun@qq.com','88','php'),(7,'刘强东','jd@qq.com','76','C++'),(8,'马Huateng','10001@qq.com','59','java'),(9,'张一鸣','ByteDance@qq.com','77','golang');----索引ofdumptable------Tableindex`student`--ALTERTABLE`student`ADDPRIMARYKEY(`id`);----UseAUTO_INCREMENTintheexportedtable------UsetableAUTO_INCREMENT`student`--ALTERTABLE`student`MODIFY`id`int(11)NOTNULLAUTO_INCREMENT,AUTO_INCREMENT=10;COMMIT;/*!40101SETCHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT*/;/*!40101SETCHARACTER_SET_RESULTS=@OLDSET_CHARAC_*!40101SETCOLLATION_CONNECTION=@OLD_COLLATION_CONNECTION*/;作者坦克
