从mysql检索数据并从php输出json

从mysql检索数据并从php输出json,php,mysql,json,arduino,Php,Mysql,Json,Arduino,我正在以以下格式从中转储json {“现场”:[{“地点”:“室外”,“温度”:“33.90”, “温度指数”:“93.02”,“露点指数”:“21.18”, “露点指数”:-6.01;“热量指数”:“87.17”, “热度指数”:“30.65”,“湿度”:“7.40”,“UVSig”:“131.44”} ,{“位置”:“客厅”,“温度”:“31.20”, “温度指数”:“88.16”,“露点指数”:“46.78”, “露点指数”:“8.21”,“热量指数”:“85.03”, “热度指数”:“2

我正在以以下格式从中转储json

{“现场”:[{“地点”:“室外”,“温度”:“33.90”, “温度指数”:“93.02”,“露点指数”:“21.18”, “露点指数”:-6.01;“热量指数”:“87.17”, “热度指数”:“30.65”,“湿度”:“7.40”,“UVSig”:“131.44”} ,{“位置”:“客厅”,“温度”:“31.20”, “温度指数”:“88.16”,“露点指数”:“46.78”, “露点指数”:“8.21”,“热量指数”:“85.03”, “热度指数”:“29.46”,“湿度”:“24.00”}],“罐”: [{“土壤湿化剂”:“118”,“avgsoilmutim”:“125”}]

这些数据是实时的,但是我的Arduino也正在转储到mysql服务器

我希望使用php检索并在前端显示它

在对php知之甚少的情况下,我编写了以下代码,成功地从mysql服务器将数据转储到浏览器中:

<?php
header('Content-type: application/json');

$servername = "localhost";
$username = "username";
$password = "secret";
$dbname = "arduinoData";

// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
     die("Connection failed: " . $conn->connect_error);
}

$sql = "SELECT  timeStamp, out_temperature, out_humidity FROM sensorLog ORDER BY timeStamp DESC LIMIT 1";
$result = $conn->query($sql);

if ($result->num_rows > 0) {
     // output data of each row
     while($row = $result->fetch_assoc()) {
         echo "<br>Time: ". $row["timeStamp"]. "<br>Temperature: ". $row["out_temperature"]. "<br>Humidity: " . $row["out_humidity"] . "<$
     }
} else {
     echo "0 results";
}

$conn->close();
?>

获取所有需要选择*的列,而不是查询中的3个特定列名。要获得有效的JSON对象,只需使用PHPJSON_encode函数对结果进行编码,如下例所示:

$sql = "SELECT  * FROM sensorLog ORDER BY timeStamp DESC LIMIT 1";
$result  = $conn->query($sql);

$rows = $result->fetch_all(MYSQLI_ASSOC);
header('Content-Type: application/json');
echo json_encode($rows);
注意: 您始终可以使用json_decode将json字符串转换回原始结果数组


要获取所有需要的列,请选择*而不是查询中的3个特定列名。要获得有效的JSON对象,只需使用PHPJSON_encode函数对结果进行编码,如下例所示:

$sql = "SELECT  * FROM sensorLog ORDER BY timeStamp DESC LIMIT 1";
$result  = $conn->query($sql);

$rows = $result->fetch_all(MYSQLI_ASSOC);
header('Content-Type: application/json');
echo json_encode($rows);
注意: 您始终可以使用json_decode将json字符串转换回原始结果数组



您只选择了3列:“timeStamp,out\u temperature,out\u湿度”,我相信您有两行或更多的数据,所以将查询更改为:$sql=“SELECT*FROM sensorLog ORDER BY timeStamp DESC”;提供您的数据库模式会很有用,特别是您的数据库模式看起来不像json格式。您需要加载一个包含键和MySQL值的数组,然后使用
json\u encode
将其转换为json。PHP手册PHP:json_encode-。另一个可能有用的链接-。@HassanAhmed您的意思是让MySQL表具有与检索到的json中的键相同的列名吗?@Ciastopiekarz不完全正确,但我的意思是您正在从数据库中选择json中不存在的字段,因此如果没有至少一个模式说明,将很难提供帮助;您只选择了3列:“timeStamp,out\u temperature,out\u湿度”,我相信您有两行或更多的数据,所以将查询更改为:$sql=“SELECT*FROM sensorLog ORDER BY timeStamp DESC”;提供您的数据库模式会很有用,特别是您的数据库模式看起来不像json格式。您需要加载一个包含键和MySQL值的数组,然后使用
json\u encode
将其转换为json。PHP手册PHP:json_encode-。另一个可能有用的链接-。@HassanAhmed您的意思是让MySQL表具有与检索到的json中的键相同的列名吗?@Ciastopiekarz不完全正确,但我的意思是您正在从数据库中选择json中不存在的字段,因此如果没有至少一个模式说明,将很难提供帮助;我漏掉了这个;要获得与Arduino中相同的列名,您必须选择每个列作为Arduino字段的对应名称
是错误的。好吧,这就是我使用的,我用他的代码进行了测试,并且成功了。看见他只要把列名弄对就行了。看看我的php代码:我犯了什么错误吗?太好了,应该可以了!现在,您可以对其进行现场测试并亲自查看。如果测试后一切正常,请告诉我们;要获得与Arduino中相同的列名,您必须选择每个列作为Arduino字段的对应名称是错误的。好吧,这就是我使用的,我用他的代码进行了测试,并且成功了。看见他只要把列名弄对就行了。看看我的php代码:我犯了什么错误吗?太好了,应该可以了!现在,您可以对其进行现场测试并亲自查看。如果测试后一切正常,请更新我们。