這裡向大家介紹一下這位自我說明:早在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...