php實(shí)現(xiàn)pdo數(shù)據(jù)庫操作類過程詳解
數(shù)據(jù)庫操作類的優(yōu)點(diǎn)
優(yōu)點(diǎn)可以說是非常多了,常見的優(yōu)點(diǎn)就是便于維護(hù)、復(fù)用、高效、安全、易擴(kuò)展。例如PDO支持的數(shù)據(jù)庫類型是非常多的,與mysqli不同的就是,PDO還支持其他數(shù)據(jù)庫,一套寫法多種數(shù)據(jù)庫的匹配,而mysqli僅僅是支持mysql。
代碼
Db.php
<?php
/**
* 數(shù)據(jù)庫的基本操作
*/
class Db
{
// 數(shù)據(jù)庫的默認(rèn)連接參數(shù)
private $dbConfig=[
'db'=>'mysql', // 數(shù)據(jù)庫類型
'host'=>'localhost', // 主機(jī)名稱
'port'=>'3306', // 默認(rèn)端口
'user'=>'root', // 用戶名
'pass'=>'root', // 密碼
'charset'=>'utf8', // 默認(rèn)字符集
'dbname'=>'edu', // 默認(rèn)數(shù)據(jù)庫
];
// 新增主鍵id
public $insertId = null;
// 受影響的記錄
public $num = 0;
// 單例模式,本類的實(shí)例
private static $instance = null;
// 數(shù)據(jù)庫的連接
private $conn = null;
/**
* Db構(gòu)造方法
* 私有化以防止外部實(shí)例化
*/
private function __construct($params=[])
{
// 初始化連接參數(shù)
$this->dbConfig = array_merge($this->dbConfig,$params);
// 連接數(shù)據(jù)庫
$this->connect();
}
/**
* 禁止外部克隆該實(shí)例
*/
private function __clone()
{
// TODO:Implement __clone() method.
}
/**
* 獲取當(dāng)前類的單一實(shí)例
*/
public static function getInstance($params=[])
{
if (!self::$instance instanceof self) {
self::$instance = new self($params);
}
return self::$instance;
}
private function connect()
{
try{
// 配置數(shù)據(jù)源DSN
$dsn = "{$this->dbConfig['db']}:host={$this->dbConfig['host']};port={$this->dbConfig['port']};dbname={$this->dbConfig['dbname']};charset={$this->dbConfig['charset']}";
// 創(chuàng)建PDO對象
$this->conn = new PDO($dsn,$this->dbConfig['user'],$this->dbConfig['pass']);
// 設(shè)置客戶端字符集
$this->conn->query("SET NAMES {$this->dbConfig['charset']}");
}catch (PDOException $e){
die('數(shù)據(jù)庫連接失敗'.$e->getMessage());
}
}
/**
* 完成數(shù)據(jù)表的操作:CURD
*/
public function exec($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(); // 獲取最后操作錯(cuò)誤信息的數(shù)組
var_dump($error);
}
}
// 獲取單條查詢結(jié)果
public function fetch($sql)
{
return $this->conn->query($sql)->fetch(PDO::FETCH_ASSOC);
}
// 獲取多條查詢結(jié)果
public function fetchAll($sql)
{
return $this->conn->query($sql)->fetchAll(PDO::FETCH_ASSOC);
}
}
?>調(diào)用
Demo.php
<?php /** * Db類測試 */ require 'Db.php'; // 獲取Db類實(shí)例 $db = Db::getInstance(); // 新增操作 // $sql = "INSERT student SET name='張一鳴',email='ByteDance@qq.com',grade='59',course='golang'"; // $db->exec($sql); // echo '成功插入了'.$db->num.'條記錄,主鍵id是'.$db->insertId; // 刪除操作 // $sql = "DELETE FROM student WHERE id='4'"; // $db->exec($sql); // echo '成功刪除了'.$db->num.'條記錄'; // 更新操作 // $sql = "UPDATE student SET grade='1199' WHERE id='1'"; // $db->exec($sql); // echo '成功更新了'.$db->num.'條記錄'; // 查詢單條操作 // $sql = "SELECT id,name,email,grade FROM student WHERE grade < '60'"; // $row = $db->fetch($sql); // var_dump($row); // // 查詢多條操作 // $sql = "SELECT id,name,email,grade FROM student WHERE grade > '80'"; // $rows = $db->fetchAll($sql); // var_dump($rows); ?>
數(shù)據(jù)庫表格結(jié)構(gòu)

SQL
全選下面的SQL語句粘貼至數(shù)據(jù)庫管理工具的SQL執(zhí)行框進(jìn)行執(zhí)行即可快速創(chuàng)建測試數(shù)據(jù)庫。
-- phpMyAdmin SQL Dump -- version 4.8.5 -- https://www.phpmyadmin.net/ -- -- 主機(jī): localhost -- 生成日期: 2022-08-08 10:46:35 -- 服務(wù)器版本: 5.7.26 -- PHP 版本: 7.3.4 SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO"; SET AUTOCOMMIT = 0; START TRANSACTION; SET time_zone = "+00:00"; /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; /*!40101 SET NAMES utf8mb4 */; -- -- 數(shù)據(jù)庫: `edu` -- -- -------------------------------------------------------- -- -- 表的結(jié)構(gòu) `student` -- CREATE TABLE `student` ( `id` int(11) NOT NULL, `name` varchar(32) COLLATE utf8_unicode_ci NOT NULL, `email` text COLLATE utf8_unicode_ci NOT NULL, `grade` varchar(32) COLLATE utf8_unicode_ci NOT NULL, `course` varchar(32) COLLATE utf8_unicode_ci NOT NULL ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; -- -- 轉(zhuǎn)存表中的數(shù)據(jù) `student` -- INSERT INTO `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, '劉強(qiáng)東', 'jd@qq.com', '76', 'C++'), (8, '馬化騰', '10001@qq.com', '59', 'java'), (9, '張一鳴', 'ByteDance@qq.com', '77', 'golang'); -- -- 轉(zhuǎn)儲(chǔ)表的索引 -- -- -- 表的索引 `student` -- ALTER TABLE `student` ADD PRIMARY KEY (`id`); -- -- 在導(dǎo)出的表使用AUTO_INCREMENT -- -- -- 使用表AUTO_INCREMENT `student` -- ALTER TABLE `student` MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=10; COMMIT; /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
到此這篇關(guān)于php實(shí)現(xiàn)pdo數(shù)據(jù)庫操作類過程詳解的文章就介紹到這了,更多相關(guān)php pdo數(shù)據(jù)庫操作內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
編寫PHP腳本來實(shí)現(xiàn)WordPress中評論分頁的功能
這篇文章主要介紹了編寫PHP腳本來實(shí)現(xiàn)WordPress中評論分頁的功能的方法,包括上一頁下一頁和導(dǎo)航式分頁功能的添加,需要的朋友可以參考下2015-12-12
自動(dòng)把純文本轉(zhuǎn)換成Web頁面的php代碼
用PHP來快速將純ASCII文本完美地轉(zhuǎn)換成為可讀的HTML標(biāo)記。2009-08-08
PHP數(shù)據(jù)分析引擎計(jì)算余弦相似度算法示例
這篇文章主要介紹了PHP數(shù)據(jù)分析引擎計(jì)算余弦相似度算法,結(jié)合具體實(shí)例形式分析了php計(jì)算余弦相似度的操作步驟與相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下2017-08-08
PHP學(xué)習(xí)散記_編碼(json_encode 中文不顯示)
今天使用json_encode轉(zhuǎn)換數(shù)組的時(shí)候,出現(xiàn)了中文不顯示的情況。2011-11-11
PHP實(shí)現(xiàn)通過中文字符比率來判斷垃圾評論的方法
這篇文章主要介紹了PHP實(shí)現(xiàn)通過中文字符比率來判斷垃圾評論的方法,是一個(gè)比較實(shí)用的技巧,對于進(jìn)行PHP應(yīng)用程序開發(fā)來說有一定的參考借鑒價(jià)值,需要的朋友可以參考下2014-10-10
php常用字符串String函數(shù)實(shí)例總結(jié)【轉(zhuǎn)換,替換,計(jì)算,截取,加密】
這篇文章主要介紹了php常用字符串String函數(shù),結(jié)合實(shí)例形式總結(jié)分析了php常用字符串函數(shù)的功能與使用技巧,包括字符串的轉(zhuǎn)換、替換、計(jì)算、截取、加密等各種常用操作相關(guān)函數(shù),需要的朋友可以參考下2016-12-12
PHP實(shí)現(xiàn)十進(jìn)制數(shù)字與二十六進(jìn)制字母串相互轉(zhuǎn)換操作示例
這篇文章主要介紹了PHP實(shí)現(xiàn)十進(jìn)制數(shù)字與二十六進(jìn)制字母串相互轉(zhuǎn)換操作,涉及php字符串遍歷、轉(zhuǎn)換相關(guān)操作技巧,需要的朋友可以參考下2018-08-08

