【问题标题】:MySQL data from PHP to Javascript with JSONMySQL 数据从 PHP 到带有 JSON 的 Javascript
【发布时间】:2019-03-04 09:59:32
【问题描述】:

我正在尝试使用将从 mySQL 数据库中获取数据的代码将该数据绑定到一个变量,将所有生成的 $x 放入 PHP 数组中,最后将其转换为 JSON 格式。然后我将 JSON 转换为 javascript 来处理来自那里的数据库中的数据。

请看我的代码:

<?php
        //bind to $x
        $mysqli = new mysqli('localhost', 'root', 'root', 'mytable');
        if ($stmt = $mysqli->prepare("SELECT x FROM data")) {
            $stmt->bind_result($x);
            $OK = $stmt->execute();
        }
        //put all of the resulting $x into a PHP array
        $result_array = Array();
        while($stmt->fetch()) {
            $result_array[] = $x;
        }
        //convert the PHP array into JSON format, so it works with javascript
        $json_array = json_encode($result_array);

        if ($stmt = $mysqli->prepare("SELECT data.y FROM data")) {
            $stmt->bind_result($y);
            $OK = $stmt->execute();
        }
        //put all of the resulting y into a PHP array
        $result_array = Array();
        while($stmt->fetch()) {
            $result_array[] = $y;
        }
        //convert the PHP array into JSON format, so it works with javascript
        $json_array2 = json_encode($result_array);  


    ?>  

    <script>
        var xv = <?php echo $json_array; ?>;
        var yv = <?php echo $json_array2; ?>;
        var storage = [];
        for(var i=0;i<100;i++)
        { 
            var x = xv[i];
            var y = yv[i];
            var json = {x: x, y: y};
            storage.push(json); 
        }

我的问题是为什么页面将其显示为输出而不将数据传输到数组

"prepare("SELECT x FROM data")) { $stmt->bind_result($x); $OK = $stmt->execute(); } //将所有结果名称放入 PHP 数组 $ result_array = Array(); while($stmt->fetch()) { $result_array[] = $x; } //将PHP数组转换成JSON格式,所以可以和javascript一起使用 $json_array = json_encode($result_array); /* if ($stmt = $mysqli->prepare("SELECT data.y FROM data")) { $stmt->bind_result($y); $OK = $stmt->execute(); } //把所有将结果名称转换为 PHP 数组 $result_array = Array(); while($stmt->fetch()) { $result_array[] = $y; } //将 PHP 数组转换为 JSON 格式,因此它可以与 javascript 一起使用$json_array2 = json_encode($result_array); */ ?>"

【问题讨论】:

  • 您有问题吗?
  • 因为 x 和 y 都来自同一张表,请执行 select x,y .... 并在一个查询中完成所有操作
  • 从这个var xv = "&lt;?php echo $json_array; ?&gt;";中删除引用,它是一个javascript对象,所以var xv = &lt;?php echo $json_array; ?&gt;;
  • 好的,我进行了这些更改,并编辑了我的问题是什么问题仍然存在。我无法理解为什么它将代码显示为输出
  • 我认为这似乎是错误的,$x 和 $y 应该在这里有值 $stmt->bind_result($x);这里是 $stmt->bind_result($y);

标签: javascript php mysql arrays json


【解决方案1】:

在这些行中你有错误的代码:

var xv = "<?php echo $json_array; ?>";
var yv = "<?php echo $json_array2; ?>";

您正在将json_encode 的输出打印到双引号部分。这意味着当 PHP 渲染该页面时,输出将是这样的:

var xv = "[...smth]";

在这些行之后,您尝试从 for 中的数组获取值,但 xvxz 变量不是对象类型,它们是字符串。而不是这样做:

var xv = <?=$json_array;?>;
var yv = <?=$json_array2;?>;

【讨论】:

  • 感谢您的回答我做了更改,但问题仍然存在
  • 所以我查看了它并且行中有语法错误。 var xv = =$json_array;?>; var yv = =$json_array2;?>;
【解决方案2】:

xv 和 yv 是一个字符串,因为你使用了 json_encode。

您可以使用 JSON.parse 将字符串转换为 json。

var xv = "<?php echo $json_array; ?>";
xv = JSON.parse(xv);
var yv = "<?php echo $json_array2; ?>";
yv = JSON.parse(yv);
var storage = [];
for(var i=0;i<100;i++)
{ 
     var x = xv[i];
     var y = yv[i];
     var json = {x: x, y: y};
     storage.push(json); 
}

【讨论】:

  • 好的,我实现了这个编辑,输出结果似乎仍然与问题中描述的输出相同。
【解决方案3】:

首先:如果您在输出中看到 PHP 代码,则需要检查您的服务器和 PHP 配置。 Web 服务器将您的 PHP 脚本解释为纯文本,并且只是吐出原始代码,而不是通过 PHP 解释器执行它。

第二:在 Javascript 中嵌入 PHP 并不理想。您应该有一个 PHP 脚本来处理 MySQL 查询,然后使用 AJAX 请求获取 Javascript 中的输出。此外,您对数据进行变异的方式是多余且不理想的。

这将从数据库中检索您的结果并将其编码为 JSON:

<?php
    // connect, query, bind results
    $result = [];
    $mysqli = new mysqli('localhost', 'user', 'pass', 'db');
    if ($stmt = $mysqli->prepare("SELECT x,y FROM table")) {
        $stmt->execute();
        $stmt->bind_result($x,$y);

        while ( $stmt->fetch() ) {
            $result[] = [
                'x' => $x, 
                'y' => $y
            ];
        }

        echo json_encode($result);
    }
?>  

这是一个从 PHP 脚本检索输出的基本 AJAX 示例:

<script>
function fetchMyStuff() {
    // basic ajax example
    var xhr = new XMLHttpRequest();
    xhr.onreadystatechange = function() {
        if ( xhr.readyState == 4 ) {
            console.log(
                JSON.parse( xhr.responseText )
            );
        }
    }
    xhr.open('GET', 'myscript.php', true);
    xhr.send();
}

fetchMyStuff();
</script>

您将在控制台中看到与您的查询结果相对应的结果对象:

[{x:'x1':y:'y1'},{x:'x2',y:'y2'},...]

就我个人而言,我不喜欢准备好的语句的限制,我希望对我的 PHP 文件采用更优化的方法:

<?php
    $mysqli = new mysqli('localhost', 'user', 'pass', 'db');
    echo json_encode(
       $mysqli->query("SELECT x,y FROM table")->fetch_all( MYSQLI_ASSOC )
    );
?>  

这利用 mysql-nd 模块来执行所有工作,将完整的结果集作为关联数组提取并仅在几行中对其进行编码。

【讨论】:

  • 谢谢你,我现在要努力解决所有这些问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-09-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-23
  • 2011-06-16
  • 1970-01-01
相关资源
最近更新 更多