【高階】小程式
前言:
小程式資料介面進行了封裝,那麼如何針對這些封裝進行應用呢,這些封裝有哪些限制和優勢,本文進行了一點的實踐。本文針對 DB::select做了實踐和研究,Select的操控顯然比insert要複雜很多,微信的封裝不錯,但是,使用還是比較麻煩,而且,有時候並不能起到作用,感覺這個介面封裝的不是很好。
1 DB::select的官方介面說明和封裝原始碼:
圖一
2 DB::select 騰訊的例子:
// 條件為字串 $rows = DB::select('tableName', 'nickname = Jason'); // 條件為陣列 $rows = DB::select('tableName', ['nickname = Jason']); // 條件為 key-value 陣列 $rows = DB::select('tableName', ['nickname' => 'Jason']);
// 查詢結果
// $rows > [['nickname' => 'Jason','age' => 21]]
騰訊的例子很簡單,首先第一個引數為table,第二個引數是要查詢的列名陣列,這裡沒有輸入,那麼預設我們看到是'*',也就是所有的列的資料都會需要。
後面則是三種表示condition的例子,【HSY案】這裡都不是一個意思,去查哪些條件,我們分析一下:
-
'nickname = Jason',
這裡的條件是'nickname = Jason'。意思是按照nickname列,然後,這是一個字串,直接用的,就是WHERE nickname = Jason
-
['nickname = Jason'],
這裡應該是一個一維的組,騰訊做conditionprocess處理了,我們分析一下,看下圖,foreach這裡,字串‘nickname = Jason’ 就是陣列的值,key = 0,後面顯然,$value不是數字,那麼,執行,array_push,$cdt尾部插入,變成'0 := 0 ',然後值保留到$execValues[0]裡面,
所以,對第二種型別闡述,我們的得到,=
$conditions = ' and 0 := 0' $execValues[0]=‘nickname = Jason’
圖二,
回到圖一,執行list,把$condition 和 $execValues) 分別賦值為:
list($condition, $execValues) = array_values(self::conditionProcess($conditions, $operator));
$condition = ' and 0 := 0' 和 ‘nickname = Jason’
[HSY案]試驗表明這個條件往往得到的結果bud不對。
3. ['nickname' => 'Jason']
這是一個標準的PHP的陣列表示方式,發現這種表述是可以的
3 實踐:幾個經過驗證的其他語句組合的可行的表述方式
3.1 某列找變數相等的判斷
3.1.1 字元變數
例如: $input_date 是個字元變數,
$rows = DB::select('Notes_List',['*'],['SubmitTime' => $input_date]);
3.1.2 數字判斷的方法:
直接用數字寫入介面是不可的,這裡有一個變通的方式,就是給你需要填寫的數字加上引號,也就是把數字轉化為字元,
<?php
$str="123.9abc";
$int=intval($str); //轉換後數值:123
$float=floatval($str); //轉換後數值:123.9
$str=strval($float); //轉換後字串:"123.9"
?>
然後,
$rows = DB::select('Table',['*'],['column' => $str]);
3.1.3 布林判斷的寫法
SQL根本不支援bool,用的是1來表述,那麼到DB的介面,就是’1‘,於是
判斷用:
$rows = DB::select('Table',['*'],['column' => ‘1’]);
3.1.4 多條件組合的寫法
從Table中選取全部的列,然後遵循引數3列表給出的所有條件,所有的條件都是and的關係。
$rows = DB::select('Table', ['*'], ['列表1' => $value,'列表2' => $value2],'and');
3.2 不支援的寫法
$rows = DB::select('Notes_List',['*'],['Notes_id' => 2,'Notes_id' => 3]); // 無法知道列表是與還是和的關係
$rows = DB::select('Notes_List',['*'],['Notes_id' => 2]);// 數字值大小判斷,直接寫數字不可
3.4 SQL 語句的自由編輯寫法
SQL語句的自由編輯,需要根據你的不同的後臺的背景,採用不同的方式。在PHP下,需要用字元連線的辦法,拼湊出SQL的相關語句,然後寫到DB的API裡面就可以了,具體實現可以加我的QQ進行討論: 28044280
參考: