前言:

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

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

  1. 小程序 - 腾讯云 - wafer - PHP - 数据库接口的应用和研究 - 01 - DB::insert

    前言: 小程序数据接口进行了封装,那么如何针对这些封装进行应用呢,这些封装有哪些限制和优势,本文进行了一点的实践. 1 DB::insert DB::insert 的官网的详细封装源码: 为此我总结的 ...

  2. 【基础】【后台】 微信小程序 - 腾讯云 - wafer2 - PHP - DEMO - 003 - 源码分析 - 02 - 路由

    本文原创,欢迎转载,但是,务必保持原文并且给出原文链接. 前言: 前一篇已经介绍了,整个wafer2的文件组织,这里结合文件组织,分析一下,微信后台采用的MVC的框架. 路由是服务器配置管理的重要方面 ...

  3. 【中级】 微信小程序 - 腾讯云 - wafer2 - PHP - DEMO - 003 - 源码分析 - 01 - 文件组成详细分析

    1 前言: 本文原创,欢迎转载,但是,务必保持原文并且给出原文链接. 微信小程序 - 腾讯云 - PHP - DEMO 是微信提供的一个微信小程序和腾讯云小程序云服务wafer 进行接口的例子. 本仓 ...

  4. php qcloud sdk weapp_微信小程序腾讯云php后台解决方案

    微信小程序腾讯云php后台解决方案 微信小程序前段需要添加必要的文件以配合后端 (1)wafer2-client-sdk sdk提供了几种接口包括登陆,获取用户openid,图片上传等 (2)conf ...

  5. 小程序 + 腾讯云移动直播SDK

    小程序 + 腾讯云移动直播SDK 小程序 腾讯云移动直播SDK 关于腾讯 M L V B 直播 必须项: 主播开播: 观众收看: 连麦: 发送文本消息: 小程序 主要是推流标签和拉流标签:没什么好说的 ...

  6. 【基础问题】微信小程序 - 腾讯云 - 一站式方案 - PHP - wafer 和 wafer2的区别和wafer2的实践

    前言: 项目目前选择了腾讯小程序一站式部署,反而有点懵了,服务器怎么配置呢?好像接口没有,查询后,发现有的Demo有服务器配置有的没有,折腾观察了一会,原来有两个版本wafer.我把关键的地方高亮了, ...

  7. 【中级】 微信小程序 - 腾讯云 - wafer2 - PHP - 实战 - 后台 - 数据库的访问 - 01 - 通过wx.request或者qcloud.request来获取数据库数据

    前言 本例子,通过wx.request来获取数据库数据. 1 构建测试数据库 构建如下数据库,数据库名称user01.数据库表db_user.数据库里面输入了几个数据,然后,我们通过 wx.reque ...

  8. 【中级】【后台】 微信小程序 - 腾讯云 - wafer2 - PHP - DEMO - 003 - 源码分析 - 03 - 腾讯后台初始化 和 CodeIgniter

    本文原创,欢迎转载,但是,务必保持原文并且给出原文链接. 前言: 本节对Wafer 服务端 SDK 是腾讯云为微信小程序开发者提供的快速开发库,SDK 封装了以下功能供小程序开发者快速调用的源码的初始 ...

  9. 微信小程序 腾讯云 mysql 初始_微信小程序初始化怎么处理?小程序服务器域名配置...

    小程序初始化配置指引 假如您已成功创建了小程序资源,需要对现有的资源进行一些简单配置后,才能让小程序跑起来 未创建过资源的用户可以先在小程序控制台进行创建 1.配置微信小程序通信域名 首先我们在小程序 ...

最新文章

  1. git config配置文件
  2. linux 火狐无法执行二进制文件_尝试在Linux上运行Shell脚本时“无法执行二进制文件”...
  3. 前端学习(1151):let经典面试题1
  4. 查询sql语句是否使用索引
  5. java gc时会暂停运行吗,java gc 项目终止运行
  6. 作者:庄会富(1985-),男,中国科学院昆明植物研究所科技信息中心主管
  7. 杜绝0.1 + 0.2 =0.30000000000000004
  8. JS分页控件,可用于无刷新分页
  9. 为了分页,先page.tld,再pageModel,再动态查询
  10. (17)python_字典
  11. win10 桌面的的文件都不见了 提示不注销保存都文件都为临时_Windows10隐藏的8个小技巧,每一个都非常实用又高效...
  12. java毕业生设计药品管理系统演示录像2021计算机源码+系统+mysql+调试部署+lw
  13. excel多个窗口独立显示_办公软件操作技巧060:如何快速切换excel工作簿
  14. Pygame 入门基本指南
  15. Stellarium Windows/Linux编译记录
  16. 2019版本ppt如何导出论文所需300dpi像素以上的高清图片
  17. Hive有分区文件到时select不到数据问题-----修复分区命令 msck repair table xxxxx
  18. [QDialog]qt虚拟键盘的实现以及qdateedit实现打开虚拟键盘
  19. 【原创】flutter之发布插件包到pub.dev离线在线两套大法
  20. 解决org.apache.ibatis不存在的问题

热门文章

  1. 设置网格_500ETF网格设置
  2. Linux、Mac、windows 系统下 配置Python虚拟环境 virtualenvwrapper教程,workon切换环境, 非常简单方便
  3. 微信小程序开发---页面生命周期
  4. 现在以及未来 互联网名词记录
  5. 【Python】汉诺塔问题
  6. 一些关于网页标题的动态js特效
  7. Django之models
  8. 云服务器 存放 文件夹,云服务器 存放 文件夹
  9. 台式蓝牙模块_华为第一台台式机来了!已上线官网 定价尚未公布
  10. java switch case多个条件_JAVA基础程序设计之判断与循环