前言
本例子,通过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
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