**FrPHP Db 概述**
~~~
FrPHP?db?操作類以pdo為基礎、全面采用預處理機制、最大程度保證了數據操作的安全性。采用了單利模式,保證一庫一連、一表一對象!為高效開發提供了基礎。
大部分的數據操作都無需編寫復雜的sql命令,簡單配置即可。
~~~
**準備工作:數據庫信息配置**
使用數據庫操作前,請打開保證數據庫配置正確!具體操作見上一節 ^\_^
**數據操作詳解
**下文將以數據表 persons為例,數據結構 :
| 字段 | 類型 | 長度 | 作用 |
| --- | --- | --- | --- |
| id
| int | 10 | 主鍵自動增加 |
| name
| vachar | 20 | 姓名 |
| age
| int | 4 | 年齡 |
| addtime
| int | 11 | 添加時間
|
| classid
| int | 10 | 班級id 索引 |
**增加數據 add($data)**
功能:向數據表內寫入數據。
參數:數值形式的數據對象(鍵名稱對應數據表的字段名)
返回:寫入數據對應的主鍵數據值
~~~
<?php
class?indexController?extends?FrBase{
????public?$tableName?=?'persons';
????public?function?index(){
????????$addData??=?array('name'?=>?'grace',?'age'?=>?mt_rand(10,?200));
????????$personId?=?$this->db->add($addData);
????????if($personId){
????????????echo?'寫入數據成功,主鍵:'.$personId;
????????????echo?'<br?/>'.$this->db->getSql();
????????}else{
????????????echo?'<br?/>'.$this->db->error();
????????}
????}
}
~~~
**獲取最近一次執行的操作命令?getSql()**
功能:獲取最近一次執行的操作命令
參數:無
返回:最近一次執行的操作命令
**設置條件 where($where, $whereData)**
功能:設置sql條件(預處理機制)
參數:1、條件(使用 ? 作為展位符)2、條件占位符對應的數值(數組格式)
**刪除數據 delete()**
功能:刪除一條或者多條符合條件的數據
參數:無
返回:true / false
~~~
<?php
class?indexController?extends?FrBase{
????public?$tableName?=?'persons';
????public?function?index(){
????????$this->db->where('id?=??',?array(1))->delete();
????}
}
~~~
**更新數據 update()**
功能:更新符合條件的數據
參數:更新數據(數組格式,鍵名稱對應數據表的字段名)
~~~
<?php
class?indexController?extends?FrBase{
????public?$tableName?=?'persons';
????public?function?index(){
$data?=?array('name'?=>?'phpGrace');
????????$this->db->where('id?=??',?array(2))->update($data);
????}
}
~~~
**對指定的字段進行遞加或遞減?field()**
參數:1、字段名稱 2、遞加值 (正數遞加,負數遞減)
~~~
<?php
class?indexController?extends?FrBase{
????public?$tableName?=?'persons';
????public?function?index(){
????????$this->db->where('id?=??',?array(2))->field('age',?1);
????}
}
~~~
**獲取單條數據 fetch()**
功能:獲取單條數據
參數:查詢字段(可省參數,默認 \*)
返回:查詢成功返回數組形式的數據,失敗返回空(可以使用empty函數判斷)
說明:可以配合條件進行查詢
~~~
$arr?=?$personModel->where('id?=??',?array(2))->fetch();
print_r($arr);
~~~
**獲取多條數據 fetchAll()**
功能:獲取單條數據
參數:查詢字段(可省參數,默認 \*)
返回:查詢成功返回數組形式的數據,失敗返回空(可以使用empty函數判斷)
說明:可以配合條件、排序、分頁等方法進行查詢
~~~
<?php
class?indexController?extends?FrBase{
????public?$tableName?=?'persons';
????public?function?index(){
????????$data?=?$this->db->fetchAll();
p($data);
????}
}
~~~
**查詢排序 order()**
功能:設置排序規則
參數:排序規則
~~~
$data?=?$this->db->order('id?desc')->fetchAll();
~~~
**查詢數據截取 limit($start, $num)**
功能:設置limit,截取數據
參數:1、起始位置, 2、數據條目數
~~~
$data?=?$this->db->order('id?desc')->limit(0,?10)->fetchAll();
~~~
**執行自定義的sql命令?query($sql, $execute)**
參數:1、sql命令(如果有條件推薦使用展位符 ?), 2、占位符對應的數據(可省參數,sql命令包含占位符時傳遞)
~~~
$res?=?$this->db->query('delete?from?persons?where?id?=??',?array(2));
print_r($res);
~~~
**queryFetch 和?queryFetchAll()**
功能:使用query()函數查詢數據時后續的查詢函數,queryFetch() 用于單條數據,queryFetchAll()用于多條數據。
參數:無
返回:對應的數據(數組形式)
~~~
$this->db->query('select?*?from?persons?where?id?>??',?array(1));
$arr?=?$this->db->queryFetchAll();
print_r($arr);
~~~
**使用join() 完成多表聯合**
參數:聯合語句
示例表 classes 表結構
| 字段 | 類型 | 長度 |
| --- | --- | --- |
| id
| int | 10 |
| class\_name
| varchar | 20 |
~~~
<?php????
class?indexController?extends?FrBase{
????public?$tableName?=?'persons';
????public?function?index(){
????????$arr?=??$this->db->join('as?a?left?join?'.sc('db','pre').'classes?as?b?on?a.classid?=?b.id')->fetchAll('a.*,?b.class_name');
?????????print_r($arr);
????}
}
~~~
**使用page()函數完成分頁**
參數:每頁數據條目數(可省參數,默認 10條)
返回:數組格式的查詢數據
格式:array(數據, 分頁信息)
~~~
<?php
$arr?=??$this->db->page(1)->fetchAll();
print_r($arr);
~~~
**獲取sql錯誤方法?error()
**
~~~
echo?$this->db->error();
~~~
**獲取原生的pdo操作對象?getDb()**
~~~
$pdo?=??$this->db->getDb();
var_dump($pdo);
~~~
**計算數據條目總數 count()**
~~~
$count?=??$this->db->count();
echo?$count;
~~~
**指定字段的數據最大值 max(字段)**
~~~
$max?=??$this->db->max('age');
echo?$max;
~~~
**指定字段的數據最小值 min(字段)**
~~~
$min?=??$this->db->min('age');
echo?$min;
~~~
**指定字段的數據平均值 avg(字段)**
~~~
$avg?=??$this->db->avg('age');
echo?$avg;
~~~
**指定字段的數據總和 sum(字段)**
~~~
$sum?=??$this->db->sum('age');
echo?$sum;
~~~
**獲取寫入數據的主鍵值?lastInsertId()**
~~~
$res?=??$this->db->add(array('name'?=>?'user',?'age'?=>?18,?'addtime'?=>?10585888,?'classid'?=>?1));
echo?$this->db->lastInsertId();
~~~
**獲取操作影響的數據條目數?rowCount()**
~~~
$res?=??$this->db->where('id?<??',?array(2))->delete();
echo?$this->db->rowCount();
~~~
**group by**
~~~
//原始語句
select?count('a.*'),??b.class_name?from?persons?as?a?left?join?classes?as?b?on?a.classid?=?b.id?group?by?a.classid?;
//代碼實現:
$res?=?$this->db
????????->join('as?a?left?join?'.sc('db',?'pre').'classes?as?b?on?a.classid?=?b.id')
????????->group('a.classid')
????????->fetchAll("count('a.*')?as?total,?b.class_name");
echo?$this->db->getSql().'--';
print_r($res);
~~~
**獲取mysql版本?mysqlV()**
~~~
echo?$this->db->mysqlV();
~~~
**表結構分析**
~~~
$res?=?$this->db->desc();
print_r($res);
~~~
**使用 debugSql 在控制臺內輸出執行的 sql**
~~~
public?function?index(){
????$db?=?db('names');
????$db->fetchAll();
????//?在執行sql?后調用?debugSql?即可在控制臺內輸出剛剛執行的sql?命令
????$db->debugSql();
????$db->fetchAll("name");
????//?在執行sql?后調用?debugSql?即可在控制臺內輸出剛剛執行的sql?命令
????$db->debugSql();
}
~~~
- 第一章:快速開始
- 1.1 簡介和條款
- 1.2 環境和偽靜態
- 1.3 目錄結構及命名
- 1.4 初始化、原理、分組
- 1.5 兼容7.2php
- 第二章 控制器和路由
- 2.1 創建控制器
- 2.2 基礎控制器
- 2.3 URL解析
- 2.4 自定義路由
- 2.5 URL路由生成
- 第三章 數據和模型
- 3.1 數據庫的配置
- 3.2 獲取數據庫對象
- 3.3 數據庫操作
- 3.4 數據分頁詳情
- 3.5 事務操作&處理
- 3.6 數據驗證
- 3.7 表單驗證
- 3.8 全局模型創建與調用
- 第四章 視圖
- 4.1 視圖文件的創建
- 4.2 視圖調用及引用
- 4.3 視圖文件路徑模式
- 第五章 會話機制
- 5.1 cookie 操作
- 5.2 文件型 SEssion
- 5.3 session[memcache]
- 5.4 session[redis]
- 第六章 緩存機制
- 6.1 緩存的簡介和配置
- 6.2 文件型緩存
- 6.3 memcache 形式的緩存
- 6.4 redis 形式的緩存
- 第七章 配置 常量 語言
- 7.1 全局配置&分組配置
- 7.2 預定義常量
- 7.3 語言包使用說明
- 第八章 工具擴展
- 8.1 函數小工具
- 8.2 工具類函數
- 第九章 安全配置擴展
- 9.1 框架安全部署
- 9.2 常規安全配置
- 9.3 如何去擴展
- 附錄:擴展工具類
- 一 、圖片處理類
- 二、文件上傳類
- 三、IP地址獲取類