PHP數(shù)據(jù)庫(kù)操作之基于Mysqli的數(shù)據(jù)庫(kù)操作類庫(kù)
初步工作
首先,請(qǐng)大家下載這個(gè)類庫(kù) M.class.php 再下載一個(gè) Mysqli 連接數(shù)據(jù)庫(kù)的類庫(kù) MysqliDb.class.php(打包下載地址)
新建一個(gè) includes 的文件夾,將下載下來(lái)的兩個(gè) class 文件,放進(jìn)去。
然后,請(qǐng)你在項(xiàng)目下創(chuàng)建一個(gè) test.php 文件。注:UTF-8 文件格式
請(qǐng)先根據(jù)你機(jī)器的情況,填充以下代碼,用于連接數(shù)據(jù)庫(kù):
header('Content-Type:text/html;Charset=utf-8');
define('ROOT_PATH', dirname(__FILE__));
define('DB_HOST', 'localhost'); //數(shù)據(jù)庫(kù)服務(wù)器地址
define('DB_USER', 'root'); //數(shù)據(jù)庫(kù)用戶名
define('DB_PWD', '×××');//數(shù)據(jù)庫(kù)密碼
define('DB_NAME', '×××'); //數(shù)據(jù)庫(kù)名稱
define('DB_PORT', '3306'); //數(shù)據(jù)庫(kù)端口
function __autoload($className) {
require_once ROOT_PATH . '/includes/'. ucfirst($className) .'.class.php'; //自動(dòng)加載 class 文件
}
好了,上面的這些操作都是初步工作,下面正式進(jìn)入類庫(kù)的講解。
類庫(kù)講解
首先,我們得實(shí)例化 M.class.php,實(shí)例化很簡(jiǎn)單:
$m = new M(); //這步操作代表 M.class.php 中的所有功能都封裝在了變量 $m 中
注:
1、M類庫(kù)中的方法參數(shù)說(shuō)明,請(qǐng)到 M.class.php 文件中看詳細(xì)的注釋,這里不再進(jìn)行敘述。建議在學(xué)習(xí)的時(shí)候,對(duì)照著看下文件中的參數(shù)即注釋。
2、講解代碼中用到的數(shù)據(jù)庫(kù)結(jié)構(gòu)為:
CREATE TABLE `user` (
`id` int(8) unsigned NOT NULL auto_increment,
`name` varchar(50) default NULL,
`email` varchar(100) default NULL,
`age` smallint(3) default NULL,
`class_id` int(8) default NULL,
`commit_time` int(10) default NULL,
PRIMARY KEY (`id`),
KEY `name` (`name`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8
CREATE TABLE `class` (
`class_id` int(8) NOT NULL auto_increment,
`class_name` varchar(100) default NULL,
PRIMARY KEY (`class_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
并添加一條測(cè)試數(shù)據(jù)。
3、M類庫(kù)中,大部分方法都分兩中類型,即:SQL方法;拼接方法,具體在實(shí)例中可以看出
4、以下稱述中的 M 為 M.class.php 文件
方法1、Insert() 添加數(shù)據(jù)
Insert 方法的全部使用案例如下:
$m->Insert("user", null, array('焦焦', 'liruxing1715@sina.com', '23', time())); // 拼接方法:往`user`表中添加一條數(shù)據(jù),返回值為數(shù)據(jù)庫(kù)影響的行數(shù)
$m->Insert("user", null, array('焦焦', 'liruxing1715@sina.com', '23', time()), true); // 功能同上,返回 last_insert_id(插入的增長(zhǎng)id)
$m->Insert("INSERT INTO `user` (`name`, `email`, `age`, `commit_time`) VALUES ('張小花', 'zhangxiaohua@sina.com.cn', '22', '".time()."')"); //SQL方法,返回值為數(shù)據(jù)庫(kù)影響的行數(shù)
$m->Insert("INSERT INTO `user` (`name`, `email`, `age`, `commit_time`) VALUES ('張小花', 'zhangxiaohua@sina.com.cn', '22', '".time()."')", true); // 同上,返回 last_insert_id
注:Insert 方法中的第二個(gè)參數(shù)若為null,可自動(dòng)獲得插入表除 auto_increment 字段之外的所有字段,詳情請(qǐng)看M源文件;若要返回值為最后插入的 ID,那么請(qǐng)?jiān)O(shè)置 Insert 方法的最后一個(gè)參數(shù)為 true(默認(rèn)是false);
方法2、Update() 修改數(shù)據(jù)
update 方法的全部使用案例如下:
$m->Update("user", array('name'=>'李茹茹', 'age'=>24), "id=1"); //拼接方法,修改id為1的數(shù)據(jù)的名稱為“李茹茹”;年齡為“24”,其方法的返回值為受影響的行數(shù)
$m->Update("UPDATE `user` SET `name`='李茹茹', `age`=24 WHERE id = 1"); //SQL 用法,功能同上
方法3、Del() 刪除數(shù)據(jù)
Del 方法的全部使用案例如下:
$m->Del('user', 'id=3'); //拼接方法:刪除`user`表中 id 為3的數(shù)據(jù),返回受影響的行數(shù)
$m->Del("DELETE FROM `user` WHERE id=4"); //SQL方法:刪除`user`表中 id 為4的數(shù)據(jù),返回受影響的行數(shù)
$m->Del("DELETE FROM `user` WHERE id in (10, 11, 12)"); //SQL方法:刪除多條數(shù)據(jù),刪除`user`表中 id 為 10、11、12 的數(shù)據(jù),返回受影響的行數(shù)
方法4、Total() 獲取記錄數(shù),返回值都為int
Del 方法的全部使用案例如下:
$m->Total('user'); //拼接方法:返回 `user`表中的記錄數(shù),無(wú)條件
$m->Total('user', 'id>1'); //拼接方法:返回 `user`表中 id 大于1的記錄數(shù),有條件
$m->Total("SELECT COUNT(*) AS total FROM `user`"); //SQL方法,注:使用SQL方法,語(yǔ)句中必須使用 "AS total",否則會(huì)報(bào)錯(cuò)
方法5、IsExists() 檢查數(shù)據(jù)是否存在,返回值為boolean
$m->IsExists('user', "`name`='焦焦'"); //拼接方法:返回`user`表中是否存在`name`為“焦焦”的數(shù)據(jù),返回true,若不存在,返回false
方法6、InsertId() 獲取表下一個(gè)添加的自動(dòng)增長(zhǎng)id,注意,這里不進(jìn)行添加操作,只是獲取下一個(gè)增長(zhǎng)id
echo $m->InsertId('user'); //獲取`user` 表下一個(gè)添加的自動(dòng)增長(zhǎng)id
方法7、GetRow() 返回單條數(shù)據(jù),返回值為一維數(shù)組
GetRow 方法的全部使用案例如下:
$data = $m->GetRow("SELECT `name`,email FROM `user` WHERE id=1"); //SQL方法,返回一維數(shù)組,例如:Array ( [name] => 焦焦 [email] => liruxing1715@sina.com )
$data = $m->GetRow("SELECT u.`name`, u.email, c.class_name FROM `user` u, `class` c WHERE u.class_id=c.class_id AND u.id=1"); //SQL方法,多表查詢
$data = $m->GetRow('user', '`name`,email', "id=1"); //拼接方法
$data = $m->GetRow('user as u,`class` c', 'u.`name`,u.email,c.class_name', "u.id=1 AND u.class_id=c.class_id"); //拼接方法,多表查詢
$data = $m->GetRow("SELECT `name`,email FROM `user`"); //如果沒(méi)有指定條件應(yīng)該是顯示全部信息,但是在此方法中將默認(rèn)顯示第一條(不推薦這么使用?。。。?BR>
$data 是查詢出來(lái)的一維數(shù)組。
方法8、GetOne() 返回單個(gè)數(shù)據(jù)
GetOne 方法的全部使用案例如下:
$name = $m->GetOne("SELECT `name` FROM `user` WHERE id=1"); //SQL方法,返回一個(gè)字符串,例如:焦焦
$name = $m->GetOne("user", "name", "id=1"); //拼接方法,返回一個(gè)字符串,例如:焦焦
方法9、FetchAll() 返回所有記錄
$data = $m->FetchAll("user"); //返回`user`表中的所有記錄,以二維數(shù)組的形式
$data = $m->FetchAll("SELECT * FROM `user`"); //SQL 方法,功能和返回值同上
$data = $m->FetchAll("user", "name,email", "id>1", 'id DESC', '2'); //返回兩條id>1的數(shù)據(jù),只顯示name,email,并且以id 為倒序排序。注:請(qǐng)注意該方法的最后一個(gè)參數(shù)也可以為'0,2',目的是為分頁(yè)準(zhǔn)備的,如果第一頁(yè)為'0,2'的話,那么第二頁(yè)就是'2,2'
//該方法也支持聯(lián)表查詢和多表查詢,下面以聯(lián)表查詢?yōu)槔?BR>$data = $m->FetchAll("`user` as u LEFT JOIN `class` as c ON u.class_id=c.class_id", "u.`name`,u.email, c.class_name", "u.id=1"); //注意:該拼接方法中,ON 添加的位置
注:對(duì)于該 FetchAll 方法,后續(xù)我會(huì)寫(xiě)一篇使用該方法進(jìn)行完美分頁(yè)的文章?。≌?qǐng)關(guān)注。
方法10、MultiQuery() 執(zhí)行多條SQL語(yǔ)句
$sql = "INSERT INTO user (`name`,email, age, class_id, commit_time) VALUES ('賈花花', 'jiahuahua@sina.com.cn', '22', '1', '".time()."')"; //添加一個(gè)名叫“賈花花”的學(xué)生信息
$sql .= ";DELETE FROM `user` WHERE `name`='焦焦'"; //刪除一條名叫“焦焦”的學(xué)生信息
//解釋:$sql 是多條 SQL 以英文;(分號(hào))拼接起來(lái)的
$data = $m->MultiQuery($sql); //返回為true,代表執(zhí)行成功;為false,代表執(zhí)行失敗
類庫(kù)講解完畢
到此該類庫(kù)的全部功能就講解完畢,希望你能多看看M文件,了解其內(nèi)部運(yùn)行的機(jī)制。M 文件不會(huì)存在執(zhí)行緩慢情況,請(qǐng)大家放心使用。
如果在使用過(guò)程中出現(xiàn) SQL 拼接錯(cuò)誤,類庫(kù)會(huì)報(bào)出友善的錯(cuò)誤提示。
有問(wèn)題請(qǐng)留言,歡迎大家的批評(píng)和建議,加油!學(xué)習(xí)好運(yùn)。
- PHP7使用ODBC連接SQL Server2008 R2數(shù)據(jù)庫(kù)示例【基于thinkPHP5.1框架】
- mysqli擴(kuò)展無(wú)法在PHP7下升級(jí)問(wèn)題的解決
- php操作mysqli(示例代碼)
- php使用mysqli向數(shù)據(jù)庫(kù)添加數(shù)據(jù)的方法
- PHP入門教程之使用Mysqli操作數(shù)據(jù)庫(kù)的方法(連接,查詢,事務(wù)回滾等)
- php封裝的mysqli類完整實(shí)例
- PHP mysql與mysqli事務(wù)使用說(shuō)明 分享
- PHP以mysqli方式連接類完整代碼實(shí)例
- php簡(jiǎn)單解析mysqli查詢結(jié)果的方法(2種方法)
- PHP基于MySQLI函數(shù)封裝的數(shù)據(jù)庫(kù)連接工具類【定義與用法】
- PHP7.0連接DB操作實(shí)例分析【基于mysqli】
相關(guān)文章
PHP自動(dòng)生成后臺(tái)導(dǎo)航網(wǎng)址的最佳方法
寫(xiě)過(guò)很多種不同的后臺(tái)導(dǎo)航寫(xiě)法最終積累了這種最寫(xiě)法,算是最好的吧,個(gè)人感覺(jué)還算是不錯(cuò)的,喜歡的朋友可以參考下2013-08-08PHP生成可點(diǎn)擊刷新的驗(yàn)證碼簡(jiǎn)單示例
這篇文章主要介紹了PHP生成可點(diǎn)擊刷新的驗(yàn)證碼,結(jié)合簡(jiǎn)單實(shí)例形式分析了php驗(yàn)證碼的實(shí)現(xiàn)與調(diào)用顯示方法,涉及js動(dòng)態(tài)調(diào)用驗(yàn)證碼php文件的相關(guān)技巧,需要的朋友可以參考下2016-05-05PHP number_format() 函數(shù)定義和用法
number_format() 函數(shù)通過(guò)千位分組來(lái)格式化數(shù)字2012-06-06PHP 5.3和PHP 5.4出現(xiàn)FastCGI Error解決方法
這篇文章主要介紹了PHP 5.3和PHP 5.4出現(xiàn)FastCGI Error解決方法,需要的朋友可以參考下2015-02-02PHP使用PDO調(diào)用mssql存儲(chǔ)過(guò)程的方法示例
這篇文章主要介紹了PHP使用PDO調(diào)用mssql存儲(chǔ)過(guò)程的方法,結(jié)合簡(jiǎn)單實(shí)例形式分析了php基于pdo簡(jiǎn)單實(shí)現(xiàn)連接及調(diào)用存儲(chǔ)過(guò)程相關(guān)操作技巧,需要的朋友可以參考下2017-10-10PHP json_decode函數(shù)詳細(xì)解析
本篇文章主要是對(duì)PHP json_decode函數(shù)進(jìn)行了介紹,需要的朋友可以過(guò)來(lái)參考下,希望對(duì)大家有所幫助2014-02-02