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 = "<?php echo $json_array; ?>";
中删除引用,它是一个javascript对象,所以var xv = <?php echo $json_array; ?>;
好的,我进行了这些更改,并编辑了我的问题是什么问题仍然存在。我无法理解为什么它将代码显示为输出
我认为这似乎是错误的,$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
中的数组获取值,但 xv
和 xz
变量不是对象类型,它们是字符串。而不是这样做:
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
将数据从 js 发送到 php、php 到 mysql 以及 REST json 响应时所需的正确编码/转义/htmlentities 是啥