如何在使用 PHP 编码之前编辑 JSON 数组

How to edit JSON array before encode using PHP

提问人:Manvendra Singh 提问时间:5/15/2020 更新时间:5/15/2020 访问量:175

问:

在这里,我想编辑产品图像的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

评论


答:

0赞 Felippe Duarte 5/15/2020 #1

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

$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

评论

0赞 Manvendra Singh 5/16/2020
谢谢 Felippe,您的解决方案对我有用,感谢您的一些旁注。并且必须通过准备好的查询。
1赞 mickmackusa 5/15/2020 #2

这里有一个建议。在 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