【问题标题】:Save query results in one array将查询结果保存在一个数组中
【发布时间】:2014-12-19 05:54:49
【问题描述】:

我是 PHP 的绝对初学者。我目前正在开发一个具有 PHP 网络服务的 Android 应用程序。我需要获得 2 个执行的 SQL 查询的结果并将其转换为 json。我的问题是我没有将任何结果返回给客户,也没有收到任何错误。我认为这是因为我将结果分成了两个数组。如何将 2 个查询的结果保存为一个数组,然后保存为一个 json 响应?

代码编辑:

<?php
    $host = "localhost"; // host of MySQL server
    $user = "root"; // MySQL user
    $pwd = ""; // MySQL user's password
    $db = "food"; // database name

    // Create connection
    $con = mysqli_connect($host, $user, $pwd, $db);

    // Check connection
    if(mysqli_connect_errno($con)) {
        die("Failed to connect to MySQL: " . mysqli_connect_error());
    } 
    //$uname = $_POST['uname'];

    // query the application data
    $sql = "SELECT * FROM uploads WHERE status = '0' ORDER By  precious_time DESC";
    $sql2 = "SELECT * FROM uploads_avatar WHERE uname = 'sinii'";

    $result = mysqli_query($con, $sql);
    $result2 = mysqli_query($con, $sql2);

    // an array to save the application data
    $rows = array();
    $rows2 = array();

    // iterate to query result and add every rows into array
    while($row = mysqli_fetch_array($result, MYSQLI_ASSOC)) {
        $rows[] = $row; 

    }

    // iterate to query result and add every rows into array
    while($row2 = mysqli_fetch_array($result2, MYSQLI_ASSOC)) {
       $rows2[] = $row2; 

    }

    $result_merge = array_merge($rows, $rows2);

    // close the database connection
    mysqli_close($con);


    // echo the application data in json format
    echo json_encode($result_merge);
    ?>

但是我在没有第二个查询的情况下使用第二个数组等运行应用程序,然后它可以工作,但我也需要第二个查询的数据。

感谢您的帮助!

【问题讨论】:

  • 你可以使用array_merge合并你的数组。
  • 直接对数据库执行查询的结果是什么?他们甚至检索结果集吗?如果没有找到记录,您的数组将保持为空。
  • 尝试这样做: $sql $result $rows while()..second query $sql2 $result2 $rows2 while()....根据我的经验,这是最好的。
  • 请看我编辑的代码。我现在正在使用 array_merge 但是当我在浏览器上测试它时,我只能从第一个查询中得到结果:-(

标签: php android mysql arrays json


【解决方案1】:

要在一个数组中获取值,请使用 array_merge 合并两个数组,或者您可以以这种格式进行操作

$jsonResult = array();

while($row2 = mysqli_fetch_array($result2, MYSQLI_ASSOC)) {
  $jsonResult["uploads"][] = $row; 
}


while($row2 = mysqli_fetch_array($result2, MYSQLI_ASSOC)) {
  $jsonResult["upload_avatar"][] = $row2; 
}

echo json_encode($jsonResult);

使用数组合并

 $jsonResult = array_merge($rows, $rows2);
   echo json_encode($jsonResult);

对于 json 响应,您应该首先通过在 Web 浏览器中查看响应来检查响应。

【讨论】:

  • 您好,谢谢,但在您的示例中,只有一个名为 $jsonResult 的数组。所以没有什么可以合并的,还是?
  • 请看我编辑的代码。我现在正在使用合并,但我只在浏览器中显示第一个查询的结果。有什么想法吗?
  • 你能检查你的第二个数组($rows2) 的响应是否为空。做一个 print_r($rows2) 吗?
  • 好的,我让它在服务器端工作......现在我必须用 json 在 java 端捕获合并的数组。你是否也有这方面的最佳实践:-)
  • 就个人而言,没有这样的硬性规定。您将得到的响应将是 jsonarray,而在我的工作流程中,我尝试以 json 对象格式将响应从服务器发送到应用程序
【解决方案2】:

查询的时候为什么不直接用一个mysql查询来合并两张表??

select * from uploads,uploads_avatar where uploads.status = '0' and uploads_avatar.uname = 'sinii';

【讨论】:

  • 好的,我会试试你的建议。
  • 如果数据库中没有匹配的值会导致输出不正确,比如uploads中有内容但upload_avatar没有内容时会生成一个空集
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-05-12
  • 1970-01-01
  • 2020-03-09
  • 2021-03-01
  • 2013-12-04
  • 1970-01-01
  • 2021-12-28
相关资源
最近更新 更多