【问题标题】:How to edit JSON array before encode using PHP如何在使用 PHP 进行编码之前编辑 JSON 数组
【发布时间】:2020-09-01 09:38:24
【问题描述】:

在这里我想编辑产品图像的 JSON 数组,我想在其中发送图像名称(来自数据库)和图像路径(静态而不来自数据库) 我的 json 数组在哪里

image=(图片路径+图片名称)

我正在这样做

$query="SELECT * FROM products WHERE product_type='$product' ";
$result = mysqli_query($conn,$query);
$dbdata = array();
      if ($result) 
      {
        while ( $row = $result->fetch_array())  {
        $dbdata[]=$row;
        }

         echo json_encode($dbdata);
      }

输出是

"aprice": "90",
    "7": "85",
    "oprice": "85",
    "8": "0",
    "offer": "0",
    "9": "133259dac801eaeeb37b3876b3966ee4.jpg",
    "image": "133259dac801eaeeb37b3876b3966ee4.jpg"

这里我想在图片名称前添加图片路径

我试过了

$query="SELECT * FROM products WHERE product_type='$product' ";
$result = mysqli_query($conn,$query);
$dbdata = array();
      if ($result) 
      {
        while ( $row = $result->fetch_array())  {
        $image="xyzabc.com/admin/upload/product_img/".$row['image'];
        $dbdata[]=$row;
        foreach($dbdata as $key => $value)
        {
          $dbdata[$key]['image'] = $image;
        }
        $mainarr = array('status' =>"200" , );
        }

         echo json_encode($dbdata);
      }

以上代码的输出

"7": "85",
    "oprice": "85",
    "8": "0",
    "offer": "0",
    "9": "133259dac801eaeeb37b3876b3966ee4.jpg",
    "image": "xyzabc.com/admin/upload/product_img/cf6e65aa87538f218c29cf3033954c31.jpg"

并且图像名称也不预期输出是最后一个产品的图像名称。 如何做到这一点?

【问题讨论】:

    标签: php mysql json api mysqli


    【解决方案1】:

    这是一个建议。在您的 sql 中使用 CONCAT(),以便您可以直接将整个结果集转储到您的 json_encode() 调用中。无需编写循环。

    未经测试的代码:

    $query = "SELECT aprice,
                     oprice,
                     offer,
                     CONCAT('xyzabc.com/admin/upload/product_img/', image)
              FROM products
              WHERE product_type = ?"
    $stmt = $conn->prepare($query);
    $stmt->bind_param("s", $product);
    $stmt->execute();
    $result = $stmt->get_result();
    echo json_encode($result->fetch_all(MYSQLI_ASSOC));
    

    这是一个值得信赖的阅读准备好的语句的地方:https://phpdelusions.net/mysqli_examples/prepared_select

    【讨论】:

      【解决方案2】:

      只需在添加到数组之前修改您的数据:

      $query="SELECT * FROM products WHERE product_type='$product' ";
      $result = mysqli_query($conn,$query);
      $dbdata = array();
      if ($result) {
          while ( $row = $result->fetch_array())  {
              $row['image'] = "xyzabc.com/admin/upload/product_img/".$row['image']; // <--HERE
              $dbdata[] = $row;
          }
          echo json_encode($dbdata);
      }
      

      一些旁注:

      1. 最好选择要发送哪些列,因为您可以修改表并破坏另一侧。所以,在这种情况下,最好使用SELECT aprice, oprice, image, ... FROM Products ...

      2. 您的查询可能容易受到 SQL 注入攻击。在此处阅读如何使用准备好的查询:https://www.php.net/manual/en/mysqli.quickstart.prepared-statements.php

      【讨论】:

      • 谢谢你,Felippe,你的解决方案对我有用,也感谢你的一些旁注。生病必须通过准备好的查询。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-12
      • 2018-07-28
      • 2010-10-09
      • 2017-05-12
      • 1970-01-01
      相关资源
      最近更新 更多