MySQL 数据从 PHP 到带有 JSON 的 Javascript

Posted

技术标签:

【中文标题】MySQL 数据从 PHP 到带有 JSON 的 Javascript【英文标题】:MySQL data from PHP to Javascript with JSON 【发布时间】: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); 【参考方案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 模块来执行所有工作,将完整的结果集作为关联数组提取并仅在几行中对其进行编码。

【讨论】:

谢谢你,我现在要努力解决所有这些问题。

以上是关于MySQL 数据从 PHP 到带有 JSON 的 Javascript的主要内容,如果未能解决你的问题,请参考以下文章

使用 JSON 和 PHP 从 Mysql DB 获取数据到 listView

带有 PHP 和 MySQl 的 Google 图表工具

PHP从Android将JSON数据插入MySQL数据库

将数据从 js 发送到 php、php 到 mysql 以及 REST json 响应时所需的正确编码/转义/htmlentities 是啥

Android - 如何使用 PHP 从 MySQL 数据库中获取响应?

带有 JSON、PHP 的 iOS