如何在使用 PHP 编码之前编辑 JSON 数组
How to edit JSON array before encode using PHP
这里我想编辑产品图片的 JSON 数组,我想在其中发送图片名称(来自数据库)和图片路径(静态而不是来自数据库)
我的 json 数组
图片=(图片路径+图片名称)
我是这样做的
$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"
并且输出不是预期的,图像名称也是最后一个产品的图像名称。
如何实现?
只需在添加到数组之前修改您的数据:
$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);
}
一些旁注:
最好选择发送哪些列,因为你可以修改table并破坏另一边。所以,在这种情况下,最好使用 SELECT aprice, oprice, image, ... FROM Products ...
您的查询可能容易受到 SQL 注入攻击。在此处阅读如何使用准备好的查询:https://www.php.net/manual/en/mysqli.quickstart.prepared-statements.php
这是一个建议。在 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
这里我想编辑产品图片的 JSON 数组,我想在其中发送图片名称(来自数据库)和图片路径(静态而不是来自数据库) 我的 json 数组
图片=(图片路径+图片名称)
我是这样做的
$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"
并且输出不是预期的,图像名称也是最后一个产品的图像名称。 如何实现?
只需在添加到数组之前修改您的数据:
$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);
}
一些旁注:
最好选择发送哪些列,因为你可以修改table并破坏另一边。所以,在这种情况下,最好使用
SELECT aprice, oprice, image, ... FROM Products ...
您的查询可能容易受到 SQL 注入攻击。在此处阅读如何使用准备好的查询:https://www.php.net/manual/en/mysqli.quickstart.prepared-statements.php
这是一个建议。在 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