PDOMySQLDriver類使用方法

2021-07-29 03:56:02 字數 4687 閱讀 7031

這裡向大家介紹一下這位自我說明:早在2023年我就開始寫這個php類庫了,平時在工作中,將一些好的想法,一些問題的解決方法等融合進來,歷時兩年多,經過不斷的實踐,我感覺它已經很成熟了,於是它來到了你面前!

查詢資料:

// 查詢id為5的那行資料的年齡資訊: 

$age

=$pdo

->mapfield('t-person', array('id'

=>

5), 'age');

//也可以這樣(主鍵作為唯一的條件,欄位名可以忽略):

$age

=$pdo

->mapfield('t-person', 5, 'age');

// 還可以這樣使用原生語句

$age

=$pdo

->fetchfield('select `age` from `t_person` where `id`=5');

// 查詢年齡為5的那行資料

$personinfo

=$pdo

->maprow('t_person', array('age'

=>

5));

// 查詢id為5的那行資料(主鍵作為唯一條件,欄位名可省略)

$personinfo

=$pdo

->maprow('t-person', 5);

// 查詢年齡為5的那行資料,只取id,name兩個字段

$personinfo

=$pdo

->maprow('t_person', array('age'

=>

5), array('id', 'name'));

// 查詢年齡為5且是男性的那行資料,只取id,name兩個字段

$personinfo

=$pdo

->maprow('t_person', array('age'

=>

5, ***=>

'男'), array('id', 'name'));

// 還可以這樣使用原生語句

$personinfo

=$pdo

->fetchrow("select `id`, `age` from `t_person` where `age`>5 and `***`='男'");

// 查詢所有年齡為5的資料

$persondata

=$pdo

->mapdata('t_person', array('age'

=>

5));

// 查詢所有年齡為5且是男性的資料,只取id,name兩個字段

$persondata

=$pdo

->mapdata('t_person', array('age'

=>

5, ***=>

'男'), array('id', 'name'));

// 條件使用鍵值對的形式只能表達一種邏輯(即,相等),它在底層上是進行預查詢的,是sql安全的!

// 但有時業務不僅僅是相等的邏輯,如查詢年齡大於7的所有資料,為此引入條件模版,將拼合的資料部分用雙括號括起來,底層使用:key的形式替換並進行預查詢

// sql注入通常是條件資料拼湊以及非法輸入造成的,這其中邏輯運算是我們指定的,但資料是外來的,是不可信的,所以要將資料部分單獨用雙括號括起來

// 請注意在雙引號中使用php變數時,正確的寫法如:"find_in_set(id,})" ,道理你懂得!

$persondata

=$pdo

->mapdata('t_person', array('age>'), array('id', 'name'));

// 請注意在map開頭的這一類方法中,只有條件模版沒有指定鍵值(數字除外),才會對其進行處理,這也是防止誤處理的判斷(因為此時鍵值已經沒有意義了)

// 有時查詢的不僅僅是字段,還可能伴有一些聚合函式及運算,為此引入了查詢模版,將表示式整體用雙括號括起來

// 查詢時,返回字段一般是我們指定的,可以排除sql注入的可能,故底層沒有做特殊處理,所以整體用雙括號括起來,告訴底層這是個表示式,而不是字段

// 如查詢7歲以上的男性人數:

$counter

=$pdo

->maprow('t_person', array('age>'),array(''));

//應用條件模版時,模糊查詢中的%的位置應當如下(查詢名字中有『王』字的人):

$persondata

=$pdo

->mapdata('t_person', array('name like '), array('id', 'name'));

更新資料

// 將id為5的資料的年齡設定為7 

$pdo->mapupdate('t_person', array('id'=>5), array('age'=>7));

// 也可以這樣(主鍵作為唯一的條件,名字可以忽略)

$pdo->mapupdate('t_person', 5, array('age'=>7));

// mapupdate方法不允許空條件出現(安全考慮)!

// 通常update 中的set子句都是具體的資料,邏輯簡單,所以不支援模版形式

插入資料

// 向t_person表插入一條資料(id自增) 

$pdo->postdata('t_person', array(

'name'=>'張三',

'age'=>5,

'***'=>'男',

'addr'=>'大王家村' ));

// 同update 中的set子句一樣insert語句不支援模版形式

刪除資料

// 刪除id為5的資料 

$pdo

->mapdelete('t_person', array('id'

=>

5));

// 也可以這樣(主鍵作為唯一的條件,名字可以忽略)

$pdo

->mapdelete('t_person', 5);

// 同更新一樣mapdelete方法都不允許空條件出現!

對exec方法擴充套件,簡化『非查詢類』的預查詢

//pdo中原生的exec方法只能執行一般的sql,預查詢則很麻煩,如執行乙個更新: 

$stmt

=$pdo

->prepare("update `t_person` set age=age+1 where age>?"); $count

=$stmt

->execute(array(5));//返回受影響的行數

// 現在你可以將其合併了:

$count

=$pdo

->exec("update `t_person` set age=age+1 where age>?", array(5));

對query方法擴充套件,新增條件模版支援,防止sql注入

// 進行預查詢通常很麻煩,進行查詢條件拼湊時更麻煩(如多條件查詢,每次的查詢條件是跟使用者的意願有關) 

// 為此能將一般的查詢自動轉換為預查詢是乙個好主意,所以我在query中進行了擴充套件:

query($query, $tplcheck=null, $fetchmode=null)

// 當$tplcheck設為true時,會檢查sql語句中是否有條件模版,並自動轉換(沒有設定時,取決與全域性變數$querytplcheck)

// 使用條件模版自然有稍許的效能損失,如果是類似向資料庫中匯入資訊的操作,還是關掉吧! ($tplcheck優先順序高於$querytplcheck)

// 例如查詢姓名中含有『王』字的人,使用條件模版可以這樣處理: $stmt = $pdo->query("select * from `t_person` where name like %}");

// 受 $querytplcheck 此全域性選項影響的方法有fetchfield()、fetchrow()、fetchdata(),

// 換句話說,它們都支援sql語句中含有條件模版的寫法,因為只有它們底層都呼叫了query方法!!

// 還有一點需要注意的時,當你開啟了$querytplcheck選項時,你應當將對可預見的字串類、日期類等資料使用條件模版(預設開啟)

對模版進行轉義 (最後一點,但也是很重要的)當使用者資料中含有 『』 意想不到的事情就會出現,雖然這種情況出現的機率很少,

但我還是附加了乙個轉義方法:

// 使用轉義方法的原生查詢語句(將使用者資料中的 『』 替換為 『\}』 ): 

$stmt = $pdo->query("select * from `t_person` where name like "); $stmt = $pdo->query("select * from `t_person` where name = ");

總結:

通常引數的順序是表名, 條件, …;

查詢時,注意方法名字是以fetch開頭,還是map開頭,注意返回的是field、row還是data;

map開頭的這一類方法的條件部分都可以用條件模版的形式哦!

類值類與類指標類

類值類 行為像值的 class a a const a a ps new string a.ps i a.i 每個類物件有自己的乙份資源拷貝 a operator const a rhs a private string ps int i 一種優化拷貝賦值運算子的方法 copy and swap c...

巢狀類 匿名類 密封類

巢狀類 在c 中可以將乙個類定義在另乙個類的內部,外部的叫外部類,內部的巢狀類 namespace 27 set public void hello 巢狀類 public class web webname,weburl class program 匿名類 如果某個類的例項物件只會使用到一次,可以使...

點類,圓類,圓柱類

print?copyright c 2012,煙台大學計算機學院 all rights reserved.檔名稱 text.cpp 作 者 胡穎 完成日期 2013年5月20日 版 本 號 v1.0 輸入描述 無 問題描述 1 先建立乙個point 點 類,包含資料成員x,y 座標點 2 以poin...