前言:
小程序数据接口进行了封装,那么如何针对这些封装进行应用呢,这些封装有哪些限制和优势,本文进行了一点的实践。本文针对 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 ,这是标准的SQL SELECT WHERE的句法结构。
-
['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
参考: