1. 程式人生 > >【高階】小程式

【高階】小程式

前言:

小程式資料介面進行了封裝,那麼如何針對這些封裝進行應用呢,這些封裝有哪些限制和優勢,本文進行了一點的實踐。本文針對 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案】這裡都不是一個意思,去查哪些條件,我們分析一下:

  1. 'nickname = Jason',

這裡的條件是'nickname = Jason'。意思是按照nickname列,然後,這是一個字串,直接用的,就是WHERE  nickname = Jason

,這是標準的SQL SELECT WHERE的句法結構。

  1. ['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

參考: