PHP如何连接云数据库,如何打造一个通用的云数据库

这篇博客介绍了如何作为一个客户端开发者,自行构建一个类似Bmob的云数据库服务。通过PHP实现后台接口,提供增删查改API,并封装JavaScript SDK方便前端调用。教程详细讲解了创建数据库连接、构建SQL语句、封装JS SDK等步骤,让开发者无须后台支持也能开发APP。
摘要由CSDN通过智能技术生成

前言

作为一个客户端仔,如果想自己做一个APP上线,那该怎么办?虽然界面可以写,但后台接口呢?数据保存在哪?总得有接口提供吧。这里先给大家推荐一个好用的东西,Bmob后端云,这个东西,其实就是一个云数据库,给你提供方便的增删查改api,然后把数据保存在服务器上,这样,你就可以自己搞APP了,不用后台给你接口。这个东西,还支持微信小程序、快应用等等。

开篇

刚刚买了一个服务器,学了点PHP,我要开始装逼了,php大佬们觉得有问题,可以私信我。今天,就教大家如何打造一个云数据库,就像Bmob那样。

使用示例

1、我们希望调用是通过sdk的方式,这样比较直观。如下,我们只需这样调用就行。

js篇:

查询数据

function find() {

var x = new XData("test");

x.addParm("name", "景天");

x.find(function(result) {

for(var i = 0; i < result.length; i++) {

alert(result[i].name);

}

}, function(errorinfo) {

alert(errorinfo)

});

}

我们来一行一行看

var x = new XData("test"); //===》var x = new XData({{数据表名}});

XData 是js里面封装的一个对象,你可以用你喜欢的名字;

test 是数据表名,什么person表啊,order表啊,什么的,不过要注意关键字。

x.addParm("name", "景天");//===》查询条件,查询name为景天的数据。

addParm(key,value)方法,是查询条件的api,如果查全部数据,那就去掉这个,如果查多个条件,比如说查name为景天,sex为男的数据,那就是:

x.addParm("name", "景天");

x.addParm("sex", "男");

类似这样,添加组合就行了。

那其他的查询条件呢?例如按照某个字段排序、返回多少条数据,这些也是一样可以的,只需要添加类似的api方法就好。

x.find(function(result) {

for(var i = 0; i < result.length; i++) {

alert(result[i].name);

}

}, function(errorinfo) {

alert(errorinfo)

});

查询结果,第一个方法回调的是查询的结果数组,不用再json了,已经是一个数组了。第二个方法回调的是错误信息,可以直接弹框提示就好,或者加个code码,进行不同的判断。

增加数据

function add() {

var x = new XData("test");

x.addParm("name", "景天");

x.addParm("content", "景天是个大英雄");

x.add(function(result) {

alert("增加成功")

}, function(errorinfo) {

alert(errorinfo)

});

}

呐,类似的api,应该不用解释了。

修改数据

function update() {

var x = new XData("test");

x.addParm("content", "景天好帅");

x.setId("4");

x.update(function(result) {

alert("更新成功")

}, function(errorinfo) {

alert(errorinfo)

});

}

这里多了一个方法:x.setId("4");

设置要修改的数据id,每个数据库表,都有一个自增的id,其实不建议用这个,为啥?因为数字容易被人看出来,乱调这个更新api就GG。所以,一般会生成一个objectId的字段,这个是增加数据的时候就生成,随机的几位乱码。

删除数据

var x = new XData("test");

x.setId("4");

x.del(function(result) {

alert("删除成功")

}, function(errorinfo) {

alert(errorinfo + "fail")

});

删除数据,只需一个方法就行啦,设置要删除的id。

如何开发?

好啦,我们说完怎样调用sdk了,那下面我们说说如何来实现这个sdk。

PHP开发

上篇博客,已经说到怎样操作数据库的增删查改了,那我们留意一下增删查改的流程:

1、创建连接数据库

2、检测连接

3、连接SQL语句

4、检测结果、输出

5、关闭连接

那其实,增删查改不同的地方,只有SQL语句和结果输出。然后针对每个数据表,查询条件,去动态的修改SQL语句,那理论上就能打造出一个通用的云数据库了。

比如说:

$sql = "SELECT * FROM `my_order` ORDER BY id DESC LIMIT 100";

这条是默认的查询语句,查询 my_order 表里面的100条数据,按照id来降序返回。

$sql = "SELECT * FROM `my_order` WHERE status='1' ORDER BY id DESC LIMIT 100";

这条则是多了一个查询条件,查询status=1的数据。

那增加,删除,更新的也是一样的道理,只需修改对应的SQL语句就行了。PHP操作数据库语句

那原理知道了,我们开始写代码:

$tableName = $_GET['tableName'];

$data = $_GET['data'];

if ($tableName == "") {

die('{"code":401,"msg":"请输入表名"}');

}

首先,我们定义两个参数,一个是tableName,就是表名,一个是data,是查询条件或者是增加的参数,json格式化的字符串。

// 创建连接

$conn = mysqli_connect($servername, $username, $password, $dbname);

mysqli_query($conn, "set names 'UTF8'");

// 检测连接

if (!$conn) {

die('{"code":400,"msg":"' . mysqli_connect_error($conn) . '"}');

}

然后创建连接,然后下面是重点

if ($data == ""){

$sql = "SELECT * FROM ".$tableName ." ORDER BY id DESC LIMIT 100";

}else{

$data = json_decode($data, true);

if(count($data)==0){

$sql = "SELECT * FROM ".$tableName ." ORDER BY id DESC LIMIT 100";

}else{

$values = "";

for ($n = 0; $n < count($data); $n++) {

$values = $values . $data[$n]["key"] .'="'. $data[$n]["value"] . '" and ';

}

$values = rtrim($values, " and ");

$sql = "SELECT * FROM ".$tableName." WHERE ".$values ." ORDER BY id DESC LIMIT 100";

}

}

上面这段代码,就是把接收到的tableName参数和data参数,解析出完整的SQL语句,所以接口内容大概是这样的 check?tableName=test&data=[{"key":"name","value":"景天"}],然后经过上面代码转换后,输出就是:

$sql = "SELECT * FROM `my_order` WHERE name='景天' ORDER BY id DESC LIMIT 100";

ok,语句搞定,后面就是输出内容了:

$result = $conn->query($sql);

if ($result) {

//echo "查询成功";

while($row = $result->fetch_assoc()) {

$list[] = $row;

}

class Result{

public $code;

public $data;

}

$result = new Result();

$result -> code = 200;

if($list==null){

$result -> data = [];

}else{

$result -> data = $list;

}

$json = json_encode($result); //把数据转换为JSON数据.

echo $json;

} else {

echo '{"code":400,"msg":"查询失败"}';

}

mysqli_close($conn);

就这样,一个通用的查询接口就好了,你可以增加一些参数传递来做查询条件,比如根据什么值来排序等等,然后就是修改对应的SQL语句就行。

JS封装sdk

ok,接口有了,但我们之间调接口的话,貌似不是很直观,不方便,那我们就封装一下吧,下面以js为例,为毛以js呢?因为我也是刚学js啊,安卓的话,你们自己封装就好啊。

首先,js调接口,是下面这样:

$.ajax({

url: "http://xxxx/check.php?tableName=" + tableName + "&data=" jsonStr,

type: 'GET',

success: function(result) {

var data = JSON.parse(result)

}

});

那我们封装一下吧

function XData(tableName) {

this.tableName = tableName;

this.addParm = addParm;

this.setId = setId;

this.parms = parms;

this.find = find;

var parms = new Array();

var index;

function addParm(key, value) {

if(key != "" && value != "") {

keyData = new Object();

keyData.key = key;

keyData.value = value;

parms.push(keyData);

}

}

function setId(id) {

index = id;

}

function find(successCallback, errorCallback) {

$.ajax({

url: "http://xxxx/check.php?tableName=" + tableName + "&data=" + JSON.stringify(parms),

type: 'GET',

success: function(result) {

var data = JSON.parse(result)

if(data.code == 200) {

successCallback(data.data)

} else {

errorCallback(data.msg)

}

}

});

}

}

ok,搞掂,上面就是查询的方法,增加,删除,更新,按照上面类似的操作就好。那就可以直接调用了:

var x = new XData("test");

x.addParm("name", "景天");

x.find(function(result) {

for(var i = 0; i < result.length; i++) {

alert(result[i].name);

}

}, function(errorinfo) {

alert(errorinfo)

});

其他封装

安卓 iOS 等等,其他的封装,其实都差不多,就是把请求接口的地方处理一下,解析数据回调回去就行。

结语

好啦,这样,一个通用的云数据就搞好啦,前提是你得有服务器或者虚拟主机哈。不然的话,你就用Bmob吧,哈哈哈哈。

技术栈 Codeigniter LeanCloud Bootstrap Admin-LTE jQuery fex-webuploader Codeigniter是一个老牌的php框架,零配置,文档极其丰富,国内的流利程度上看github的start数,让人觉得不可思议,是国外流行比较流行吧。它没有ORM,没有模板引擎,用它,只是因为够用了,LeanCloud自身就是ORM,而PHP天生就是模板语言,所以CI有没有ORM与模板引擎也无所谓。 使用LeanCloud后端帮我省去了90%以上的后端接口,没有比小程序端用JS直接操作数据库更方便的了,所以直到小程序写完,再来写后台也完全来得及。后台只为了发布商品以及订单发货状态而已。当然Bmob也是一个不错的选择,现在也推出了小程序端sdk了。 后台界面,使用了Admin-LTE,它是基于Bootstrap的一套UI,打包了太多现成的组件,菜单目录树,表格,下拉框,颜色选择器,编辑器,日历,报表,聊天窗口,具体可以下载它的demo来看。基本一套后台能想到能使用到的,都在这里了。 在登录与修改页面,其实还用到零星的vue+element-ui,取dom的最高境界就是不用取dom,数据双向绑定确实方便实惠;还有就是bootstrap没有自带MessageBox很让人抓狂,于是就上了element-ui。说不准以后就让admin-lte与jQuery下岗了,让vue+ele全职来做吧。 最后就是2个工具,composer与bower,分别用来安装php与js库,有了这些包管理工具,安装第三方依赖库,直接敲上bower install bootstrap就达目的了,日后update还是那么的方便,再也不用搜索官网,下载解压,复制到项目等一切繁琐步骤;就跟git一样,一旦用上,就再也回不去了,严重推荐。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值