通过JavaScript中的PHP查询MySQL,时间间隔

Query MySQL via PHP inside JavaScript with time interval

本文关键字:时间 MySQL 查询 JavaScript 中的 PHP 通过      更新时间:2023-09-26

基本上我想使用外部PHP脚本查询MySQL数据库。我希望每 2 秒调用一次此脚本。这个 2 秒的间隔是用 javascript(jquery, flot)启动的,如下所示:

<script type='text/javascript'>
    var data = [];
    var dataset;
    var totalPoints = 50;
    var updateInterval = 1000;
    var now = new Date().getTime();
    function GetData() {
        data.shift();
        while (data.length < totalPoints) {
            var y;
            $.ajax({
                url: 'current_api.php', 
                success: function(currentValue){
                    y = currentValue;
                    console.log(y);
                },
            });
            var temp = [now += updateInterval, y];
            data.push(temp);
        }
    }
    var options = {
        ...
    }
    $(document).ready(function () {
        GetData();
        dataset = [
            { label: "CURRENT READING", data: data }
        ];
        $.plot($("#flot-line-chart"), dataset, options);
        function update() {
            GetData();
            $.plot($("#flot-line-chart"), dataset, options)
            setTimeout(update, updateInterval);
        }
        update();
    });
</script>

目前,我在console.log(y);获得NULL值。我的处理MySQL查询的PHP脚本(current_api.php)非常简单,如下所示:

<?php
    require "dbCon.php";    // database credentials
    $databaseName = "MAIN";
    $tableName = "day"
    // OPEN MYSQL DATABASE CONNECTION IN PHP
    $dbs = mysql_select_db($databaseName, $con);
    // FETCH DATA FROM MYSQL DATABASE
    $sql = "SELECT value FROM $tableName ORDER BY id DESC LIMIT 1";
    $result = mysql_query($sql);
    header('Content-Type: application/json');
    while ($row = mysql_fetch_assoc($result)) {
        $currentValue = (int) round($row['value']);
    }
    echo json_encode($currentValue);
    // CLOSE THE DB CONNECTION
    mysql_close($con);
?>

我是 AJAX 的新手,不知道我正在尝试做的事情是否可行。有人可以帮助我调试为什么我会获得NULL值吗?提前谢谢。

您在没有任何数据的情况下在 ajax 脚本中调用current_api.php。所以没有查询字符串,没有$_GET['dbSelect'],也没有数据库。所以你的 json 只包含一个未定义的变量,NULL .

除此之外,这是不正确的,您不能使用转义函数来清理用户提供的表名,您需要根据白名单检查它。

知道了!

问题是变量y和 URL 在 $.ajax 中的声明。这一切都感谢巴马尔和杰罗恩的提示!

JavaScript应该是:

<script type='text/javascript'>
    var data = [];
    var dataset;
    var totalPoints = 50;
    var updateInterval = 1000;
    var now = new Date().getTime();
    var y;
    function GetData() {
        data.shift();
        while (data.length < totalPoints) {
            $.ajax({
                url: 'current_api.php?dbSelect=R9640E5F1E2', 
                success: function(currentValue) {
                    y = currentValue;
                    console.log(currentValue);
                },
            });
            var temp = [now += updateInterval, y];
            data.push(temp);
        }
    }
    var options = {
        ...
    }
    $(document).ready(function () {
        GetData();
        dataset = [
            { label: "CURRENT READING", data: data }
        ];
        $.plot($("#flot-line-chart"), dataset, options);
        function update() {
            GetData();
            $.plot($("#flot-line-chart"), dataset, options)
            setTimeout(update, updateInterval);
        }
        update();
    });
</script>

其中R9640E5F1E2是数据库;PHP保持原样。 :)现在。。转到另一个问题...查询脚本中的字符串。

$.ajax({
      dataType: "json",//insert line: receive data from server to json
      url: 'current_api.php?dbSelect=123', //a method 
      /* a method other
     type:"GET",
     data:{dbSelect:dbSelect},
     url: 'current_api.php',
     */
      success: function(currentValue){
        y = currentValue[0];///edit code   y = currentValue
       console.log(y);
        },
      });