2011-06-02 18 views
8

Actualizado basado en respuestas a continuación:manera adecuada para crear datos JSON con PHP/MySQL

Sobre la base de las respuestas a continuación, ahora tengo el siguiente script PHP:

header('Content-type:application/json'); 

function getdata($the_query) 
{ 
    $connection = mysql_connect('server', 'user', 'pass') or die (mysql_error()); 
    $db = mysql_select_db('db_name', $connection) or die (mysql_error()); 

    $results = mysql_query($the_query) or die(mysql_error()); 

    header('Content-type:application/json'); 

    $the_data['rss']['channels']['title'] = $title; 
    $the_data['rss']['channels']['link'] = $link; 
    $the_data['rss']['channels']['description'] = $description; 

    while($row = mysql_fetch_array($result)) 
    { 
     extract($row); 

     $the_data['rss']['channels']['items']['title'] = $item_title; 
     $the_data['rss']['channels']['items']['link'] = "$item_link; 
     $the_data['rss']['channels']['items']['date'] = $item_date; 
     $the_data['rss']['channels']['items']['description'] = $item_description; 
    } 

    mysql_close($connection); 

    return json_encode($the_data); 
} 

que devuelve la siguiente :

{ 
    "rss": 
    { 
     "channels": 
     { 
      "title":"title goes here", 
      "link":"link goes here", 
      "description":"description goes here", 
      "items": 
      { 
       "title":"'title goes here", 
       "link":"link goes here", 
       "date":"date goes here", 
       "description":"description goes here" 
      } 
     } 
    } 
} 

se debe devolver muchos artículos basados ​​en el número de filas devueltas desde la base de datos, ¿por qué sólo estoy artículos 1?

+4

Busca los datos de MySQL en una matriz y luego ejecuta 'json_encode ($ your_array)' y listo. –

+1

Su salida no funcionará por cierto. Tienes varios elementos 'items'. Supongo que cuando se analiza este JSON, solo el último "sobrevivirá". No puede tener múltiples entradas con la misma clave. Parece que quería crear una entrada de 'elementos' con cada uno de ellos como un elemento de la matriz ... –

+0

Consulte la pregunta actualizada basada en las respuestas. – oshirowanen

Respuesta

10

prueba este:

<?php 
$channel = array(
    'title' => 'title goes here', 
    'link' => 'link here', 
    'description' => 'description', 
    'items' => array() 
); 
while($row = mysql_fetch_array($results)) 
{ 
    extract($row); 
    $channel['items'][] = array(
     'title' => $title, 
     'link' => $link, 
     'guid' => $guid, 
     'pubDate' => $date, 
     'description' => $description 
    ); 
} 
$channels = array($channel); 
$rss = (object) array('rss'=> array('channels'=>$channels)); 
$json = json_encode($rss); 
echo $json; 

?> 
1

Sí que debe ser bastante simple, algo a lo largo de las líneas de

$the_data['rss']['channels']['title'] = $title; 
$the_data['rss']['channels']['link'] = $link; 
$the_data['rss']['channels']['description'] = $desc; 

y luego dentro de su bucle while que puede tener,

$the_data['rss']['channels']['items'][] = $row; 

y finalmente codificar la matriz,

json_encode($the_data); 
+0

Consulte la pregunta actualizada basada en las respuestas. – oshirowanen

+0

@oshirowanen Obviamente, solo obtiene un artículo ya que está sobrescribiendo artículos en cada iteración del ciclo. ¿Por qué no usar la línea media del código que publiqué? – Ben

Cuestiones relacionadas