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


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

    PHP打开数据库插件

    1,这个是PHP所有插件库位置

    2,修改下php.ini 文件里面的插件路径

    找到extension_dir, 去掉前面的;号, 后面的路径写ext文件夹的路径

    extension_dir = "C:/php8/ext"

    3,接着往下找到extension=pdo_mysql 去掉前面的;号

    去掉前面的;号, 代表PHP使用pdo插件.

    4,重启一下

    测试

    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

  • 相关阅读:
    iOS 内购出现 返回 NSCocoaErrorDomain ErrorCode: 4097
    《现代JavaScript教程》Arguments
    《现代JavaScript教程》Object
    Modern C++ 学习
    《现代 JavaScript 教程 》Symbol
    C++学习——format
    FcDigg 源码 asp.net 3.5
    springboot根据参数,调用不同的service接口(策略模式)
    EasyExcel导入导出excel
    【博客开通纪念】首度亮相暨发博动员大会
  • 原文地址:https://www.cnblogs.com/yangfengwu/p/16556345.html
Copyright © 2020-2023  润新知