Php 从多维数组创建JSON输出
我用三个SQL查询的结果填充一个数组。然后我创建一个临时表,将所有这些数据插入其中,然后查询该表,以便能够将结果作为json数组传递给我的Java应用程序(Android) 所以 输出看起来像Php 从多维数组创建JSON输出,php,json,Php,Json,我用三个SQL查询的结果填充一个数组。然后我创建一个临时表,将所有这些数据插入其中,然后查询该表,以便能够将结果作为json数组传递给我的Java应用程序(Android) 所以 输出看起来像 [[{"APPID":"0000000021","APPNAME":"Enhanced Email","MARKETLINK":"https:\/\/play.google.com\/store\/apps\/details?id=com.qs.enhancedemail","FILENAME":"000
[[{"APPID":"0000000021","APPNAME":"Enhanced Email","MARKETLINK":"https:\/\/play.google.com\/store\/apps\/details?id=com.qs.enhancedemail","FILENAME":"00000000089_2013-10-23 13:26:38_Enhanced Email.png","USERID":"00000000089","BADGEID":"2626511"},{"APPID":"0000000037","APPNAME":"Mobile....
然而,我认为一定有一个更好的解决办法,而不是搞乱这个临时桌子的东西。有没有一种方法可以从$row2数组创建相同的输出,而无需任何sql查询
解决方案:
我混合了hotzu和SoaperGEM的溶液:
$result = array();
try{
$stmt = $conn->prepare("SELECT c.APPID, t.APPNAME, t.MARKETLINK, t.FILENAME, t.USERID, c.BADGEID FROM COMMENTROOM c
INNER JOIN TABLE_ADS t ON t.ID = c.APPID
INNER JOIN REG_USERS r ON r.ID = t.USERID
WHERE c.BADGEID = ?
GROUP BY c.APPID");
$stmt->execute(array($badgeID));
while ($row = $stmt->fetch(PDO::FETCH_OBJ)) {
$result[] = $row;
}
} catch(PDOException $e) {
echo 'ERROR: ' . $e->getMessage();
$server_dir = $_SERVER['HTTP_HOST'] . rtrim(dirname($_SERVER['PHP_SELF']), '/\\');
header('Location: http://' . $server_dir);
exit();
}
echo "[".json_encode($result)."]";
exit();
这实际上是一个SQL问题,而不是其他任何问题。您以前从未在SQL中使用过联接吗?您需要做的就是这样:
SELECT c.APPID, t.APPNAME, t.MARKETLINK, t.FILENAME, t.USERID, r.BADGEID
FROM COMMENTROOM c
INNER JOIN TABLE_ADS t ON c.APPID = t.ID
INNER JOIN REG_USERS r ON r.ID = t.USERID
已编辑 试试这个:
$result = array();
try{
$stmt = $conn->prepare("SELECT c.APPID, t.APPNAME, t.MARKETLINK, t.FILENAME, t.USERID, r.BADGEID FROM COMMENTROOM c
LEFT JOIN TABLE_ADS t ON t.ID = c.APPID
LEFT JOIN REG_USERS r ON r.ID = t.USERID
WHERE c.APPID = ?
GROUP BY c.APPID";
$stmt->execute(array($badgeID));
while ($row = $stmt->fetch(PDO::FETCH_OBJ)) {
$result[] = $row;
}
} catch(PDOException $e) {
echo 'ERROR: ' . $e->getMessage();
}
echo json_encode($result);
这给了我完整性约束冲突,因为表应该与列一起指定,就像SoaperGEM那样。而不是像SoaperGEM那样更改sql查询。我看不到你的完整表格结构。。。我知道这只是一个例子。你的代码和SoaperGEM一样优秀。我会努力让它工作。你能检查一下我在初始问题中添加的代码中的语法错误吗?主要问题是,如果我们看不到表的确切结构和表之间的关系,我们就无能为力。如果您无法成功使用我编辑的代码,您应该提供表结构,以及它们之间的关系,尝试使用左连接而不是内部连接。它不是null,我得到的是[]。这是由r.BADGEID=?行,因为没有它,我接收的结果$badgeID不为null,并且它在dbyes中有记录,WHERE是错误的,它应该是:WHERE c.APPID=?因为结果对象不在数组中。因此,如果您愿意,您应该在字符串化之前将$result放入数组中:echo json_encode(array($result))
SELECT c.APPID, t.APPNAME, t.MARKETLINK, t.FILENAME, t.USERID, r.BADGEID
FROM COMMENTROOM c
INNER JOIN TABLE_ADS t ON c.APPID = t.ID
INNER JOIN REG_USERS r ON r.ID = t.USERID
$result = array();
try{
$stmt = $conn->prepare("SELECT c.APPID, t.APPNAME, t.MARKETLINK, t.FILENAME, t.USERID, r.BADGEID FROM COMMENTROOM c
LEFT JOIN TABLE_ADS t ON t.ID = c.APPID
LEFT JOIN REG_USERS r ON r.ID = t.USERID
WHERE c.APPID = ?
GROUP BY c.APPID";
$stmt->execute(array($badgeID));
while ($row = $stmt->fetch(PDO::FETCH_OBJ)) {
$result[] = $row;
}
} catch(PDOException $e) {
echo 'ERROR: ' . $e->getMessage();
}
echo json_encode($result);