2014-04-17 234 views
0

下面的PHP代码用于查询来自wamp服务器的数据并返回要在XML页面中使用的JSON对象。返回JSON对象

JSON数组应该包含该项目的描述,价格,数量和图像。

如何回显包含从$ row2和$ row3检索到的数据的JSON?

感谢

<?php 
session_start(); 
if(isset($_SESSION["userID"])) 
{ 
//echo $_SESSION["userID"]; 
?> 

<body> 
<?php 
include("connection_manager.php"); 

$query1="Select * from cart where userid='".$_SESSION["userID"]."'"; 
$result1=mysql_query($query1); 
$row1=mysql_fetch_array($result1); 

$query2="Select * from store where itemid='".$row1['itemid']."'"; 
$result2=mysql_query($query2); 
$row2=mysql_fetch_array($result2); 

$query3="Select * from photos where itemID='".$row1['itemid']."'"; 
$result3=mysql_query($query3); 
$row3=mysql_fetch_array($result3); 

?> 
+0

有你这样做完全3个单独的查询,而不是连接表的原因是什么?显而易见的是,用户在购物车中有物品,商店中的物品有照片,并且该照片具有用于检索该关系的itemID列。加入该关系而不是执行两个甚至三个独特的查询会更有效率。 – skrilled

+0

我是新来的PHP,我怎么能简化?知道我是从3个不同的行查询数据。 – user3476925

+0

不使用phps mysql,而是使用mysqli代替:http://stackoverflow.com/a/14110189/1612852 mysqli_query> mysql_query – stepquick

回答

2

输出关联数组作为JSON,使用json_encode

输出描述$ 2行一个JSON:

echo json_encode($row2); 

您还需要设置的Content-Type头文件到应用程序/ json。

+0

为什么我应该设置Content-Type?我在另一个查询中回应了JSON而未设置它。 – user3476925

+0

为用户代理发布正确的内容类型标题以了解如何正确处理响应总是更好。响应主体不会改变。 – ibtarek

+0

他需要在相同的JSON结构中的$ row2和$ row3 – shadowfox

0

我会用表连接简化到这个返回单个阵列中的单个查询,那么阵列上使用json_encode(见http://www.php.net/manual/en/function.json-encode.php

也许类似以下内容:

$userId = $_SESSION['userID']; 
$query = "SELECT store.*, photos.* 
      FROM cart 
      INNER JOIN store ON store.itemid = cart.itemid 
      INNER JOIN photos ON photos.itemid = cart.itemid 
      WHERE cart.userid='$userId'"; 
echo json_encode(mysql_fetch_array(mysql_query($query))); 

那被说,看到这篇文章为什么不使用mysql_函数: Why shouldn't I use mysql_* functions in PHP?

- EDIT--这是一个使用SQLite的例子;你可以改变它来匹配您要使用什么数据库:

$db = new SQLite3("db.db"); 

$query = "SELECT store.description, store.price, store.quantity, photos.photo_url 
      FROM cart 
      INNER JOIN store ON store.item_id = cart.item_id 
      INNER JOIN photos ON photos.item_id = cart.item_id 
      WHERE cart.user_id=1;"; 
$results = $db->query($query); 
$full_array = array(); 
while ($row = $results->fetchArray()) 
{ 
    $full_array[] = $row; 
} 
echo json_encode($full_array); 

和输出:

[ 
{ 
    "0": "a", 
    "1": 1, 
    "2": 1, 
    "3": "/images/photo_1.jpg", 
    "description": "a", 
    "price": 1, 
    "quantity": 1, 
    "photo_url": "/images/photo_1.jpg" 
}, 
{ 
    "0": "b", 
    "1": 2, 
    "2": 2, 
    "3": "/images/photo_2.jpg", 
    "description": "b", 
    "price": 2, 
    "quantity": 2, 
    "photo_url": "/images/photo_2.jpg" 
}, 
{ 
    "0": "c", 
    "1": 3, 
    "2": 3, 
    "3": "/images/photo_3.jpg", 
    "description": "c", 
    "price": 3, 
    "quantity": 3, 
    "photo_url": "/images/photo_3.jpg" 
}, 
{ 
    "0": "d", 
    "1": 4, 
    "2": 4, 
    "3": "/images/photo_4.jpg", 
    "description": "d", 
    "price": 4, 
    "quantity": 4, 
    "photo_url": "/images/photo_4.jpg" 
}, 
{ 
    "0": "e", 
    "1": 5, 
    "2": 5, 
    "3": "/images/photo_5.jpg", 
    "description": "e", 
    "price": 5, 
    "quantity": 5, 
    "photo_url": "/images/photo_5.jpg" 
} 
] 
+0

可以请你帮助我吗? – user3476925

+0

我添加了一个可能看起来像什么的例子。尽管你可能不想使用内部连接。 – shadowfox

+0

感谢shadowfox,真的帮了很多,我真的很感激。 – user3476925