摘要:早在年我就開始寫這個類庫了,平時在工作中,將一些好的想法,一些問題的解決方法等融合進來,歷時兩年多,經過不斷的實踐,我感覺它已經很成熟了,于是它來到了你面前我的倉庫地址這里假設有一個數據表,其中為主鍵。
早在2015年我就開始寫這個PHP類庫了,平時在工作中,將一些好的想法,一些問題的解決方法等融合進來,歷時兩年多,經過不斷的實踐,我感覺它已經很成熟了,于是它來到了你面前!
我的倉庫地址:https://git.oschina.net/netmo...
這里假設有一個數據表:t_person(id, name, age, sex, addr),其中id為主鍵。
查詢數據:
// 查詢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, sex=>"男"), array("id", "name"));
// 還可以這樣使用原生語句
$personInfo = $pdo->fetchRow("select id, age from t_person where age>5 and sex="男"");
// 查詢所有年齡為5的數據
$personData = $pdo->mapData("t_person", array("age"=>5));
// 查詢所有年齡為5且是男性的數據,只取id,name兩個字段
$personData = $pdo->mapData("t_person", array("age"=>5, sex=>"男"), array("id", "name"));
// 條件使用鍵值對的形式只能表達一種邏輯(即,相等),他在底層上是進行預查詢的,是SQL安全的!
// 但有時業務不僅僅是相等的邏輯,如查詢年齡大于7的所有數據,為此引入條件模版將拼合的數據部分用雙括號括起來,底層使用:key的形式替換并進行預查詢
// SQL注入通常是條件數據拼湊以及非法輸入造成的,這其中邏輯運算是我們指定的,但數據是外來的,是不可信的,所以要將數據部分多帶帶用雙括號括起來
// 請注意在雙引號中使用PHP變量時,正確的寫法如:"find_in_set(id,{{{$id_set}}})" ,道理你懂得!
$personData = $pdo->mapData("t_person", array("age>{{7}}"), array("id", "name"));
// 請注意在map開頭的這一類方法中,只有條件模版沒有指定鍵值(數字除外),才會對其進行處理,這也是防止誤處理的判斷(因為此時鍵值已經沒有意義了)
// 有時查詢的不僅僅是字段,還可能伴有一些聚合函數及運算,為此引入了查詢模版將表達式整體用雙括號括起來
// 查詢時,字段一般是我們指定的,可以排除SQL注入的可能,故底層沒有做特殊處理,所以整體用雙括號括起來,告訴底層這是個表達式,而不是字段
// 如查詢7歲以上的男性人數
$counter = $pdo->mapRow("t_person", array("age>{{7}}"),array("{{count(sex)}}"));
// 應用條件模版時,模糊查詢中的%的位置應當如下(查詢名字中有‘王’字的人)
$personData = $pdo->mapData("t_person", array("name like {{%王%}}"), array("id", "name"));
更新數據
// 將ID為5的數據的年齡設置為7
$pdo->mapUpdate("t_person", 5, array("age"=>7));
// 也可以這樣(主鍵作為唯一的條件,名字可以忽略)
$pdo->mapUpdate("t_person", array("id"=>5), array("age"=>7));
// mapUpdate方法不允許空條件出現!
// 通常update 中的set子句都是具體的數據,邏輯簡單,所以不支持模版形式
插入數據
// 向t_person表插入一條數據(id自增)
$pdo->postData("t_person", array(
"name"=>"張三", "age"=>5, "sex"=>"男", "addr"=>"大王家村"
));
// 同update 中的set子句一樣insert語句不支持模版形式
刪除數據
// 刪除ID為5的數據
$pdo->mapDelete("t_person", 5);
// 也可以這樣(主鍵作為唯一的條件,名字可以忽略)
$pdo->mapDelete("t_person", array("id"=>5));
// 同更新一樣mapDelete方法都不允許空條件出現!
對exec方法擴展,簡化‘非查詢類’的預查詢
// PDO中原生的exec方法只能執行一般的sql,預查詢則很麻煩,如查詢年齡大于5的人:
$stmt = $pdo->prepare("select * from t_person 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 {{%{$name}%}}");
// 受 $queryTplCheck 此全局選項影響的方法有fetchField()、fetchRow()、fetchData(),
// 換句話說,它們都支持SQL語句中含有條件模版的寫法,因為只有它們底層都調用了query方法!!
// 還有一點需要注意的時,當你開啟了$queryTplCheck選項時,你應當將對可預見的字符串類、日期類等數據使用條件模版(默認開啟),
// 底層上處理條件模版是進行遞歸匹配的,并只取最外層‘{{xxxx}}’,但如果你沒有進行處理,當用戶輸入了含‘{{xxxx}}’的數據,就會被錯誤的處理!
// 如果你處理了,根據取外層的道理,自然就沒事了,當然這是一個很小很小的概率事件!!
總結:
通常參數的順序是表名, 條件, ...;
查詢時,注意方法名字是以fetch開頭,還是map開頭,注意返回的是field、row還是data;
更新和刪除操作中的條件部分都可以用條件模版的形式哦!
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/22475.html
摘要:百度網盤爬蟲博客園上如何邀請好友注冊您的網站博客園上如何爬取代理服務器博客園上百度圖片爬蟲開源中國上中文分詞十分重要,推薦博客網站真分頁代碼該怎么寫博客園上磁力爬蟲源碼公開上兼容所有瀏覽器的瀏覽器復制問題 號稱史上最牛逼的幾篇博客這個說法也許夸張了點,但總體來說樓主整理的博客都是樓主幸苦之作,并且都是圍繞去轉盤網展開,這些博客幾乎透漏了該站的所有技術關鍵,細節,甚至所有核心代碼,我個人...
摘要:百度網盤爬蟲博客園上如何邀請好友注冊您的網站博客園上如何爬取代理服務器博客園上百度圖片爬蟲開源中國上中文分詞十分重要,推薦博客網站真分頁代碼該怎么寫博客園上磁力爬蟲源碼公開上兼容所有瀏覽器的瀏覽器復制問題 號稱史上最牛逼的幾篇博客這個說法也許夸張了點,但總體來說樓主整理的博客都是樓主幸苦之作,并且都是圍繞去轉盤網展開,這些博客幾乎透漏了該站的所有技術關鍵,細節,甚至所有核心代碼,我個人...
摘要:百度網盤爬蟲博客園上如何邀請好友注冊您的網站博客園上如何爬取代理服務器博客園上百度圖片爬蟲開源中國上中文分詞十分重要,推薦博客網站真分頁代碼該怎么寫博客園上磁力爬蟲源碼公開上兼容所有瀏覽器的瀏覽器復制問題 號稱史上最牛逼的幾篇博客這個說法也許夸張了點,但總體來說樓主整理的博客都是樓主幸苦之作,并且都是圍繞去轉盤網展開,這些博客幾乎透漏了該站的所有技術關鍵,細節,甚至所有核心代碼,我個人...
摘要:官方支持微軟出品,是的超集,是的強類型版本作為首選編程語言,使得開發腳本語言的一些問題可以更早更方便的找到。第一個組件那么我們來為我們的增加一個吧,在命令行窗口輸入。引導過程通過在中引導來啟動應用。它們的核心就是。 第一節:Angular 2.0 從0到1 (一)第二節:Angular 2.0 從0到1 (二)第三節:Angular 2.0 從0到1 (三) 第一章:認識Angular...
閱讀 1163·2021-11-15 18:14
閱讀 3627·2021-11-15 11:37
閱讀 754·2021-09-24 09:47
閱讀 2427·2021-09-04 16:48
閱讀 2182·2019-08-30 15:53
閱讀 2379·2019-08-30 15:53
閱讀 390·2019-08-30 11:20
閱讀 1232·2019-08-29 16:08