• 22物联网开发终端管理篇PHP使用PDO方式连接MySQL数据库,并对外提供GET,POST接口获取数据库数据(linux系统,宝塔)


    <p><iframe name="ifd" src="https://mnifdv.cn/resource/cnblogs/iot_terminal_management" frameborder="0" scrolling="auto" width="100%" height="1500"></iframe></p>

    说明

    宝塔默认就配置好了PHP连接数据库,不用像Windows那样子配置

    测试

    1,在网站根目录建一个后缀名为.php的文件,里面的内容按照下面的填写

    <?php
    
    $servername = "localhost";//数据库地址
    $username = "root";//数据库用户
    $password = "11223344";//数据库密码
    $dbname = "historical_data";//链接的数据库名字
    try {
        $conn = new PDO("mysql:host=$servername;port=3306;dbname=$dbname", $username, $password);//链接数据库    
        $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); // 设置 PDO 错误模式为异常
    
        echo "PDO的API连接成功";
    
        $conn=null;//关闭
    }
    catch(PDOException $e){
        echo "errorCode:DataBase".$e->getMessage();
    }
    
    ?>

    在浏览器上测试下, ip地址填写自己的服务器地址

    http://ip地址/php_pdo.php

    对外提供GET,POST接口获取数据库数据

    1,直接访问数据库是不安全的,咱需要做http接口进行访问

    如果用户按照前面的章节,自己的数据库里面应该有设备的数据了

    2,GET接口规定

    现在数据库里面已经存储了设备的数据了,获取某个设备某个时间段的历史数据格式规定如下:

    http://ip地址/php_mysql_get.php?client_id=设备的ID&data_time_start=开始时间&data_time_stop=结束时间

    假设获取client_id为863488051205089设备在2022-07-30 00:00:00 到  2022-07-30 22:48:00  的历史数据

    http://ip地址/php_mysql_get.php?client_id=863488051205089&data_time_start=2022-07-30 00:00:00&data_time_stop=2022-07-30 22:48:00

     

    数据返回为json格式规定如下:

    {
    "code": "OK",
    "client_id": "设备的client_id",
    "data": [
    {
    "data_time": "2022-07-30 22:45:08",
    "temperature": 34,
    "humidity": 40
    },
    {
    "data_time": "2022-07-30 22:45:18",
    "temperature": 34,
    "humidity": 40
    },
    {
    "data_time": "2022-07-30 22:45:28",
    "temperature": 34,
    "humidity": 40
    }
    ]
    }

    2,在网站根目录建一个后缀名为.php的文件,里面的内容按照下面的填写

    <?php
    //http://ip地址/php_mysql_get.php?client_id=863488051205089&data_time_start=2022-07-30 00:00:00&data_time_stop=2022-07-30 22:48:00
    $servername = "localhost";//数据库地址
    $username = "root";//数据库用户
    $password = "11223344";//数据库密码
    $dbname = "historical_data";//链接的数据库名字
    
    try {
        
        $client_id = $_GET["client_id"];
        $data_time_start = $_GET["data_time_start"];
        $data_time_stop = $_GET["data_time_stop"];
    
        try {
            $conn = new PDO("mysql:host=$servername;port=3306;dbname=$dbname", $username, $password);//链接数据库    
            $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); // 设置 PDO 错误模式为异常 
    
            $sql = "select data_time,temperature,humidity from humiture_table where client_id="."'".$client_id."'"."and data_time>="."'".$data_time_start."'". "and data_time<="."'".$data_time_stop."'";
    
            $result=$conn->prepare($sql);//准备查询语句
            $result->execute();            //执行查询语句,并返回结果集
    
            //$result = $conn->query($sql);//发送SQL语句并接收数据库返回
    
            $note;$i=0; //初始化变量
            if ($result && $result->rowCount()) {//查询到数据
                while($row = $result->fetch()) {//循环读出数据
    
                    $note["data_time"]=$row['data_time'];
                    $note["temperature"]=$row['temperature'];
                    $note["humidity"]=$row['humidity'];
                    //放到二维数组里
                    $notes[$i++]=$note;
    
                    //echo $row['temperature'].$row['humidity']. "\r\n";//打印数据
                }
                $notes = array('code'=>'OK','client_id'=>$client_id,'data'=>$notes);//组合成key-value形式的数组
                echo json_encode($notes);//把数组转为json格式
            }
            else{
                echo "{\"code\":\"ERR\",\"msg\":\"no data\"}";
            }
            $conn=null;//关闭
        }
        catch(PDOException $e){
            $err = array('code'=>'ERR','msg'=>'database execute','info'=>$e->getMessage());
            echo json_encode($err);//把数组转为json格式
        }
    } catch (Exception $e) {
        echo $e->getMessage();
    }
    
    ?>

    在浏览器上测试下, ip地址填写自己的服务器地址,设备id和查询的时间段按照自己数据库里面记录的数据填写(保证可以查到数据)

    http://ip地址/php_mysql_get.php?client_id=设备的client_id & data_time_start=2022-07-30 00:00:00&data_time_stop=2022-07-30 22:48:00

    然后应该就可以了

    3,现在改一个POST接口的

    由于get接口的请求数据会在http://上显示出来,所以最后是做成post接口的.

    在网站根目录建一个后缀名为.php的文件,里面的内容按照下面的填写

    <?php
    //http://ip地址/php_mysql_post.php
    //client_id=863488051205089&data_time_start=2022-07-30 00:00:00&data_time_stop=2022-07-30 22:48:00
    $servername = "localhost";//数据库地址
    $username = "root";//数据库用户
    $password = "11223344";//数据库密码
    $dbname = "historical_data";//链接的数据库名字
    
    try {
        
        $client_id = $_POST["client_id"];
        $data_time_start = $_POST["data_time_start"];
        $data_time_stop = $_POST["data_time_stop"];
    
        try {
            $conn = new PDO("mysql:host=$servername;port=3306;dbname=$dbname", $username, $password);//链接数据库    
            $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); // 设置 PDO 错误模式为异常 
    
            $sql = "select data_time,temperature,humidity from humiture_table where client_id="."'".$client_id."'"."and data_time>="."'".$data_time_start."'". "and data_time<="."'".$data_time_stop."'";
    
            $result=$conn->prepare($sql);//准备查询语句
            $result->execute();            //执行查询语句,并返回结果集
    
            //$result = $conn->query($sql);//发送SQL语句并接收数据库返回
    
            $note;$i=0; //初始化变量
            if ($result && $result->rowCount()) {//查询到数据
                while($row = $result->fetch()) {//循环读出数据
    
                    $note["data_time"]=$row['data_time'];
                    $note["temperature"]=$row['temperature'];
                    $note["humidity"]=$row['humidity'];
                    //放到二维数组里
                    $notes[$i++]=$note;
    
                    //echo $row['temperature'].$row['humidity']. "\r\n";//打印数据
                }
                $notes = array('code'=>'OK','client_id'=>$client_id,'data'=>$notes);//组合成key-value形式的数组
                echo json_encode($notes);//把数组转为json格式
            }
            else{
                echo "{\"code\":\"ERR\",\"msg\":\"no data\"}";
            }
            $conn=null;//关闭
        }
        catch(PDOException $e){
            $err = array('code'=>'ERR','msg'=>'database execute','info'=>$e->getMessage());
            echo json_encode($err);//把数组转为json格式
        }
    } catch (Exception $e) {
        echo $e->getMessage();
    }
    
    ?>

    打开测试工具 网站  http://www.ecjson.com/httpurl/

    通信方式选择 POST 

    路径: http://ip地址/php_mysql_post.php

  • 相关阅读:
    css的继承问题
    js弹出层
    实现网页弹出框后背景不能滑动的效果
    vue的爬坑之路(四)之基于vuecli 动态添加iconfont的symbol方法
    vue的爬坑之路(五)之基于vuecli li列表的显示隐藏
    自定义复选框checkbox样式
    vue的爬坑之路(三)之基于vuecli的VueAwesomeSwiper轮播滑块插件的使用及常见问题
    iOS 开发学习总结
    (转载)iOS股票k线组件源码,支持其他图表类型
    iOS Objective C Memory management
  • 原文地址:https://www.cnblogs.com/yangfengwu/p/16556349.html
Copyright © 2020-2023  润新知