gpt4 book ai didi

PHP:将两个单独的 mysql 查询加入同一个 json 数据对象

转载 作者:可可西里 更新时间:2023-11-01 07:29:22 24 4
gpt4 key购买 nike

我正在尝试将下面的 mysql 查询结果网格化为一个 json 对象,但不太确定如何正确执行。

$id = $_POST['id'];

$sql = "SELECT contracts.po_number, contracts.start_date, contracts.end_date, contracts.description, contracts.taa_required, contracts.account_overdue, jobs.id AS jobs_id, jobs.job_number, companies.id AS companies_id, companies.name AS companies_name
FROM contracts
LEFT JOIN jobs ON contracts.job_id = jobs.id
LEFT JOIN companies ON contracts.company_id = companies.id
WHERE contracts.id = '$id'
ORDER BY contracts.end_date";

$sql2 = "SELECT types_id
FROM contracts_types
WHERE contracts_id = '$id'";

//return data
$sql_result = mysql_query($sql,$connection) or die ("Fail.");
$arr = array();
while($obj = mysql_fetch_object($sql_result)) { $arr[] = $obj; }
echo json_encode($arr); //return json

//plus the selected options
$sql_result2 = mysql_query($sql2,$connection) or die ("Fail.");
$arr2 = array();
while($obj2 = mysql_fetch_object($sql_result2)) { $arr2[] = $obj2; }
echo json_encode($arr2); //return json

这是当前的结果:

[{"po_number":"test","start_date":"1261116000","end_date":"1262239200","description":"test","taa_required":"0","account_overdue":"1","jobs_id":null,"job_number":null,"companies_id":"4","companies_name":"Primacore Inc."}][{"types_id":"37"},{"types_id":"4"}]

请注意最后一部分 [{"types_id":"37"},{"types_id":"4"}] 是如何放置到根目录下的单独 block 中的。我希望它以“types”之类的名称嵌套在第一个分支中。

我认为我的问题更多地与 Php 数组操作有关,但我不是最擅长这方面的。

感谢您的指导。

最佳答案

在输出为 JSON 之前将结果合并到另一个结构中。使用 array_values将类型 ID 转换为类型 ID 数组。另外,修复 SQL injection漏洞。使用 PDO , 并假设错误模式是 set到 PDO::ERRMODE_EXCEPTION:

$id = $_POST['id'];
try {
$contractQuery = $db->prepare("SELECT contracts.po_number, contracts.start_date, contracts.end_date, contracts.description, contracts.taa_required, contracts.account_overdue, jobs.id AS jobs_id, jobs.job_number, companies.id AS companies_id, companies.name AS companies_name
FROM contracts
LEFT JOIN jobs ON contracts.job_id = jobs.id
LEFT JOIN companies ON contracts.company_id = companies.id
WHERE contracts.id = ?
ORDER BY contracts.end_date");

$typesQuery = $db->prepare("SELECT types_id
FROM contracts_types
WHERE contracts_id = ?");

$contractQuery->execute(array($id));
$typesQuery->execute(array($id));

$result = array();
$result['contracts'] = $contractQuery->fetchAll(PDO::FETCH_ASSOC);
$result['types'] = array_values($typesQuery->fetchAll(PDO::FETCH_NUM));

echo json_encode($result); //return json
} catch (PDOException $exc) {
...
}

如果 $contractQuery 最多返回一行,将提取行更改为:

    $result = $contractQuery->fetch(PDO::FETCH_ASSOC);
$result['types'] = array_values($typesQuery->fetchAll(PDO::FETCH_NUM));

关于PHP:将两个单独的 mysql 查询加入同一个 json 数据对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2669688/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com