使用php 造json数据接口
做前端局限性略大,想要数据不能总等后台来实现,使用php比起来使用JAVA web 简便了很多。
0x00
配置好 php +mysql+apache环境的 电脑,建议chrome API调试插件(google Chrome 网上应用商店):apiDebug-API接口调试插件
因为和tomcat 占用了8080 区分 php的服务 是8000 端口,不是php coder,使用notepad++ ,参考一些 写了连接数据库 返回 数据json.
Apache的安装路径 ...Apache24\conf\httpd.conf中修改相关配置的,php 的DocumentRoot指向为 E:/WebRoot , Listen 改为8000
DocumentRoot "E:/WebRoot"
<Directory "E:/WebRoot">
......//此处省略
</Directory>
在E:/WebRoot下新建文件夹api,作为接口路径,在api下新建两个php文件connect_config.php和getdata.php,如图:

其中,connect_config.php是为了做数据库配置。使用SQLyog (或其他工具)查看本机的mysql 已有的数据库,如图,是world数据库的city表:

用phpmyadmin 一样的直观

当然也可以自己重新建库建表,道理是一样的。
在connect_config.php中代码:
<?php
// 服务器
define('DB_HOST', '127.0.0.1');
//端口号
define('DB_PORT', '3306');
// 用户名
define('DB_USER', 'root');
// 密码
define('DB_PWD', '000000');
// 数据库名
define('DB_NAME', 'world');
?>
数据库名要选择你要连接的数据库。
getdata.php就是主要写 方法处理,包括 连接 数据库 执行查询 json格式化数据 等。
所有代码:
<?php
require_once 'connect_config.php';
// 返回数据 的状态 消息 和数据
$status = false;
$msg = '';
$data = array();
//查询语句
$query = "select * from city limit 5";
//数据库连接
$conn = mysqli_connect(DB_HOST,DB_USER,DB_PWD,DB_NAME,DB_PORT) or die('数据库连接失败');
$data1 = mysqli_query($conn, $query);
if ($data1){
$status = true;
$msg = '成功';
$i = 0;
while($row = mysqli_fetch_array($data1)){
$data [$i]['ID'] = $row['ID'];
$data [$i]['Name'] = $row['Name'];
$data [$i]['CountryCode'] = $row['CountryCode'];
$data [$i]['District'] = $row['District'];
$data [$i]['Population'] = $row['Population'];
$i++;
}
}else{
$status = false;
$msg = '数据查询失败';
$valuse = array(
$status,
$msg
);
}
echo json($status,$msg,$data);
//封装json 格式
function json($status, $message = '', $data = array()) {
if (! is_bool ( $status )) {
return '';
}
$result = array (
'status' => $status,
'message' => $message,
'data' => $data
);
echo json_encode ( $result,JSON_UNESCAPED_UNICODE);
}
?>
很简单,注释也写得很清楚,当然这是都不考虑其他的写法,查询world数据库表中的前5条数据,先看一下执行结果,直接在浏览器中输入 localhost:8000/api/getdata.php

这样看似乎不太直观,放入apidebug插件中:

初步任务完成了,这只是取到数据了但是缺少交互,
0x01.添加get请求参数
在getdata 中修改添加:
$datanum=$_GET['datanum'];
//查询语句
$query = "select * from city limit $datanum";
注意:只是做测试 没有做任何的数据校验!
测试:
直接写到url, 即把?datanum=5参数加到URL最后,多个参数用&连接。

或者使用工具

先选请求方式-get,在params 左侧key中添加 参数名右侧value中添加参数值。
0x02.添加post请求参数
修改一点点即可。
$datanum=$_POST['datanum'];
不添加任何参数请求试试?

失败了,没有查出任何数据,使用post添加参数:先选定post方式 添加参数(注意名字一致)。

0x03.分页查询
分页查询,实现分页加载怎么办?
要从sql 语法来下手
limit函数 limit关键字的用法:
LIMIT [offset,] rows
取前5条数据
select * from table_name limit 0,5
或者
select * from table_name limit 5
查询第11到第15条数据
select * from table_name limit 10,5
offset指定要返回的第一行的偏移量,rows第二个指定返回行的最大数目。初始行的偏移量是0(不是1)。
需要两个参数,一页的数量(偏移量),页码(计算起始值)。
可以这样写
$datanum=$_POST['datanum'];
$pagenum=$_POST['pagenum'];
$startnum=intval($datanum)*intval($pagenum);//计算起始值
//查询语句
$query = "select * from city limit $startnum,$datanum";
测试 一页7个页数是2 ,刚好结果是从第十五个。
这应该是第三页,不过目的达到了。。

注意:所有数据都没有校验!!
这样子 就可以用自己造数据来访问了,使用同一局域网内手机浏览器测试下,win+X 输入 ipconfig 得到 ip地址:

如图 本机ip192.168.4.146,
在手机上访问,做测试,改成直接获取:
浏览器输入192.168.4.146:8000/api/getdata.php

注意:1.如果局域网 其他设备不能访问 很大程度上是因为 计算机开启了防火墙,关闭了就好。
2.访问出错,请检查 拼写中是否有空格,逗号分号引号是否用了中文符号。
然后可以愉快的自己 造数据调接口啦,至于增删改大同小异。