【高级】小程序 - 腾讯云 - wafer - PHP - 数据库接口的应用和研究 - 02 - DB::select - 正确的接口写法 - 包括布尔判断

版权声明:本文为博主原创文章,未经博主允许不得转载。如需转载,联系作者 https://blog.csdn.net/yellow_hill/article/details/82285519

前言:

小程序数据接口进行了封装,那么如何针对这些封装进行应用呢,这些封装有哪些限制和优势,本文进行了一点的实践。本文针对 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


参考:

PHP 数组转字符串,与字符串转数组

https://www.cnblogs.com/jiangzhaowei/p/6856566.html

猜你喜欢

转载自blog.csdn.net/yellow_hill/article/details/82285519