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

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

前言

本例子,通过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 db
        foreach ($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

猜你喜欢

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