前言

本例子,通过wx.request来获取数据库数据。


1 构建测试数据库

构建如下数据库,数据库名称user01、数据库表db_user、数据库里面输入了几个数据,然后,我们通过

wx.request来做数据库访问。

注意:微信默认的数据库就是cAuth,如果需要连接其他数据库,微信给出的数据库链接方式已经更新了,这一点我有空的话专门写一遍、篇博文,这里我们用默认的数据库:cAuth即可,在里面添加测试用的表格。


2 数据库访问构建

2.1 构建服务器PHP文件

有关文件路由的设置,请参考我的其他博文:

注意文件需要大写才能访问,对于,路由的详细配置,其实也是可以设置,这在我的另外一篇博文里面已经提到了。

总之,数据的后台访问,你可以自己编写一个文件来处理。这也是典型的MVC的模式。

然后,实践的数据库操控,我们暂时都写到这个文件里面,至于后面,依据软件工程进行的封装,以后在讨论。

2.2 文件头部需要include的数据库文件:

defined('BASEPATH') OR exit('No direct script access allowed');
use \QCloud_WeApp_SDK\Mysql\Mysql as DB;

微信封装的数据库接口的命名空间必须引入先。

然后,你需要创建一个CI_Controller的类,来获取小程序的输入。

class Dbconnector extends CI_Controller {public function index() {

我们在里面定义一个接口的函数,在获取小程序输入的时候,来访问数据库的表。

在实践进行操作之前,我们先把数据库封装的接口和说明写在下一节里面。


3 数据库访问API官方实例:

MySQL命名空间

QCloud_WeApp_SDK\Mysql

API

MySQL::getInstance()

获取 SDK 连接数据库实例,这个是个 PDO 连接实例

Mysql::insert($tableName, $data)

向数据库中插入数据

参数

  • $tableName - 要操作的数据表名(必填)
  • $data - 要插入的数据(key-value 的 array 类型)

返回值

受影响的行数(数值类型)。

示例

use QCloud_WeApp_SDK\Mysql\Mysql as DB;DB::insert('tableName', ['nickname' => 'Jason','age' => 21
]);

Mysql::select($tableName[, $columns = ['*'], $conditions = '', $operator = 'and', $suffix = ''])

从数据库中查询多条数据

参数

  • $tableName - 要操作的数据表名(必填)
  • $columns - 查询出来的列名
  • $conditions - 查询条件,支持 string、array 和 key-value array 类型
  • $operator - 条件之间的操作符
  • $suffix - SQL 语句的后缀,可以用来插入 order、limit 等

返回值

返回一个包含结果集中所有行的数组。

示例

use QCloud_WeApp_SDK\Mysql\Mysql as DB;// 条件为字符串
$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]]

Mysql::row($tableName[, $columns = ['*'], $conditions = '', $operator = 'and', $suffix = ''])

从数据库中查询单条数据

参数

  • $tableName - 要操作的数据表名(必填)
  • $columns - 查询出来的列名
  • $conditions - 查询条件,支持 string、array 和 key-value array 类型
  • $operator - 条件之间的操作符
  • $suffix - SQL 语句的后缀,可以用来插入 order、limit 等

返回值

返回一个包含结果集中所有行的第一行。

示例

use QCloud_WeApp_SDK\Mysql\Mysql as DB;// 条件为字符串
$rows = DB::row('tableName', ['*'], 'nickname = "Jason"');// 条件为数组
$rows = DB::row('tableName', ['*'], ['nickname = "Jason"']);// 条件为 key-value 数组
$rows = DB::row('tableName', ['*'], ['nickname' => 'Jason']);// 查询结果
// $rows > ['nickname' => 'Jason','age' => 21]

Mysql::update($tableName, $updates[, $conditions = '', $operator = 'and', $suffix = ''])

从数据库中查询单条数据

参数

  • $tableName - 要操作的数据表名(必填)
  • $updates - 更新的数据对象
  • $conditions - 查询条件,支持 string、array 和 key-value array 类型
  • $operator - 条件之间的操作符
  • $suffix - SQL 语句的后缀,可以用来插入 order、limit 等

返回值

受影响的行数(数值类型)。

示例

use QCloud_WeApp_SDK\Mysql\Mysql as DB;// 条件为字符串
$rows = DB::update('tableName', ['age' => 22], 'nickname = "Jason"');// 条件为数组
$rows = DB::update('tableName', ['age' => 22], ['nickname = "Jason"']);// 条件为 key-value 数组
$rows = DB::update('tableName', ['age' => 22], ['nickname' => 'Jason']);// 查询结果
// $rows > 1

Mysql::delete($tableName, $conditions[, $operator = 'and', $suffix = ''])

从数据库中删除数据

参数

  • $tableName - 要操作的数据表名(必填)
  • $conditions - 查询条件,支持 string、array 和 key-value array 类型
  • $operator - 条件之间的操作符
  • $suffix - SQL 语句的后缀,可以用来插入 order、limit 等

返回值

受影响的行数(数值类型)。

示例

use QCloud_WeApp_SDK\Mysql\Mysql as DB;// 条件为字符串
$rows = DB::delete('tableName', 'nickname = "Jason"');// 条件为数组
$rows = DB::delete('tableName', ['nickname = "Jason"']);// 条件为 key-value 数组
$rows = DB::delete('tableName', ['nickname' => 'Jason']);// 查询结果
// $rows > 1

4 实践:

接口文件我们浏览,后现在开始进行正在的实践了,

4.1 数据库数据读取:

$conn = DB::getInstance(); var_dump($conn);

可以先dump一下你的数据库,看看是不是对的。

然后我们用DB的接口来访问一下,数据库中的表格,然后把数据表格打印出来看看是否一致。

      $rows = DB::select('db_user',['id']);var_dump($rows);// check the data in the dbforeach ($rows as $value){if(!is_string($value)){echo $pw_iput;echo current($value);if($pw_iput == current($value)){echo 'it is ur user!';break;}else{echo current($value);var_dump($value);continue;}}          }

主要foreach的用法,这里$value并不是一个字符串,而是一个对象,而$rows是一个数组,

那么,我们必须进行类型转换,然后,把他化为我们需要的数据类型,最常用的一般就是化为字符串,

我们用下面的一组函数就可以了,例子如下:

<?php
$tmp = array('a','b','c','d');
echo current($tmp)."\n";
echo end($tmp)."\n";
echo current($tmp)."\n";
reset($tmp);
echo current($tmp)."\n";
?>

每个数组中都有一个内部的指针指向它的"当前"元素,初始指向插入到数组中的第一个元素。

end() - 将内部指针指向数组中的最后一个元素,并输出
next() - 将内部指针指向数组中的下一个元素,并输出
prev() - 将内部指针指向数组中的上一个元素,并输出
reset() - 将内部指针指向数组中的第一个元素,并输出
each() - 返回当前元素的键名和键值,并将内部指针向前移动

current() 函数返回数组中的当前元素的值。


4.2 把数据通过wx.request的GET或者POST端给到前端

微信给出了一个CGI的DEMO里面给出了,如何通过wx.requrest、qcloud.request来获取服务器的返回的例子,通过这个例子,我们只需要把SQL中的数据给到GET 或者如果是qcloud.request直接在result的结构获取就可以了。

4.2.1 定义页内数据:

4.2.2 在addcgi.js文件设计访问逻辑:

4.2.3 页面如果有数据的话,显示出来

4.2.4 服务器数据返回代码:

<?php
defined('BASEPATH') OR exit('No direct script access allowed');class Demo extends CI_Controller {public function index() {$this -> json(['code' => 0,'data' => ['msg' => 'Hello World this is from server']]);}
}

服务器的返回数据,给到result的对象里面的data等数据里面。

4.2.5 前端对服务器返回数据的处理:

前面已经提到,返回的数据在result里面,以json的形式给过来了,

注意,给过来的数据是json,对象的数据,这就有时候牵扯到,json对象和json字符串的转换,我在以后的博文介绍。

这里,我们一定要注意,获取的数据,在console里面是可以看到的,而且,比较工整,

这时候,我们在前端获取数据就很简单,


参考:

【参考】微信 - 数据库 -封装接口说明:

https://blog.csdn.net/yellow_hill/article/details/82053413

PHP SDK 文档

https://cloud.tencent.com/document/product/619/12798#mysql

利用好PHP中use的as

https://www.cnblogs.com/mrcn/p/use-and-as-in-php.html

SQL语法基础

https://blog.csdn.net/qq_35246620/article/details/73725106

获取数组的键值

https://www.cnblogs.com/lzs-888/p/5772536.html

php 把对象转化为json

https://blog.csdn.net/zhukangle/article/details/54094669

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

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

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

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

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

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

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

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

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

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

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

  6. Mpvue+koa开发微信小程序——腾讯云开发环境的搭建及部署实现真机测试

    为什么写这篇文章? 之前写过一篇文章:微信小程序开发错误:LoginError {type: "ERR_WX_GET_USER_INFO"}解决方法 有的伙伴在这篇文章中评论为什么 ...

  7. 【非常基础实践】 微信小程序 - 腾讯云 - PHP - DEMO - 002 - 云环境搭建和开通指引- 实践

    前言: 微信小程序最快捷的方式应该还是利用腾讯云做后台,本文对开启微信小程序和腾讯云的绑定实践了一下. 包括安装,开通,开发环境配置,生产环境配置.很大一部分内容来自官网 1 注册微信小程序(官网贴图 ...

  8. 【多人会议功能】uniapp - 微信小程序 - 腾讯云

    目的:uniapp微信小程序通过腾讯云实现多人会议功能. 效果展示: 功能实现: 前提条件: 注册腾讯云 账号,并完成 实名认证. 推拉流标签不支持个人小程序,要求申请的企业类微信小程序. 步骤一:开 ...

  9. 微信小程序---腾讯云cos的使用---前端上传图片+后端生成临时密钥

    0. 腾讯云cos介绍: - 第一阶段:文件服务器,将文件存储在某个服务器(目录结构的划分). - 第二阶段:- 文件存储,将文件存储在某个服务器(目录结构的划分).- 对象存储,优化存储和操作优化( ...

最新文章

  1. 机器学习中的算法(4.2):SVM----针对线性可分问题理解
  2. 『第27天』Sunos(二)
  3. IPv6 — 网际协议第 6 版
  4. DevOps笔记-07:持续集成,持续交付,持续部署之间的区别
  5. ABP入门系列(14)——应用BootstrapTable表格插件
  6. 数据产品经理为什么吃香?
  7. 深度学习入门:Day-11_CNN
  8. java中怎样将字符串转化为date_java如何将string类型转为date类型?怎样转?
  9. C# 中,利用 Conditional 定义条件方法
  10. 如何发布google离线地图及二次开发API
  11. pandownload最新复活版登录失败_神途手游万能登录器app-神途手游万能登录器app最新手机版下载v1.0...
  12. Linux 中防火墙命令
  13. 02-03-JSP-Maven-会话-MySQL事务
  14. mysql sid是什么_数据库名、数据库实例、全局数据库名、服务名、SID等的区别
  15. axurerp出现错误报告_安装好axure8.1以后,打开直接报错退出
  16. RocketMQ的长轮询消费方式
  17. erp系统 服务器在哪里的,云erp服务器在哪
  18. 树莓派python编程入门与实战解压密码_树莓派Python编程入门与实战
  19. 微分先行PID控制算法
  20. Linux服务器c++开发之路,从Linux基础入门到服务器开发高级架构

热门文章

  1. Maven实现热部署需要的依赖
  2. 微信小程序入门四:实现table效果
  3. 【Fiddler 实战操作】如何使用 Fiddler 对苹果手机进行抓包
  4. 【教程】Microsoft Wi-Fi Direct Virtual关闭方法
  5. 【Java】输出50-100范围内所有的素数
  6. 【C语言】写一个函数,并调用该函数求两个整数的最大公约数和最小公倍数
  7. C#LeetCode刷题-树状数组
  8. C#LeetCode刷题-回溯算法
  9. asyncore.loop()是什么?
  10. 西门子智能门锁设计_如何过度设计门锁