【问题标题】:How to build a JSON array from mysql database如何从 mysql 数据库构建 JSON 数组
【发布时间】:2011-09-11 00:53:39
【问题描述】:

好的,我一直在绞尽脑汁尝试从 mysql 构建 JSON 数组。数组必须采用以下格式。我正在使用 fullcalendar 并希望使日历上的事件动态化。下面是构建数组的代码,但是目前没有从mysql获取信息

$year = date('Y');
$month = date('m');

echo json_encode(array(

    //Each array below must be pulled from database
        //1st record
        array(
        'id' => 111,
        'title' => "Event1",
        'start' => "$year-$month-10",
        'url' => "http://yahoo.com/"
    ),

         //2nd record
         array(
        'id' => 222,
        'title' => "Event2",
        'start' => "$year-$month-20",
        'end' => "$year-$month-22",
        'url' => "http://yahoo.com/"
    )

));

【问题讨论】:

    标签: php mysql json


    【解决方案1】:

    你想做这样的事情吗?

    $return_arr = array();
    
    $fetch = mysql_query("SELECT * FROM table"); 
    
    while ($row = mysql_fetch_array($fetch, MYSQL_ASSOC)) {
        $row_array['id'] = $row['id'];
        $row_array['col1'] = $row['col1'];
        $row_array['col2'] = $row['col2'];
    
        array_push($return_arr,$row_array);
    }
    
    echo json_encode($return_arr);
    

    它以这种格式返回一个json字符串:

    [{"id":"1","col1":"col1_value","col2":"col2_value"},{"id":"2","col1":"col1_value","col2":"col2_value"}]
    

    或者是这样的:

    $year = date('Y');
    $month = date('m');
    
    $json_array = array(
    
    //Each array below must be pulled from database
        //1st record
        array(
        'id' => 111,
        'title' => "Event1",
        'start' => "$year-$month-10",
        'url' => "http://yahoo.com/"
    ),
    
         //2nd record
         array(
        'id' => 222,
        'title' => "Event2",
        'start' => "$year-$month-20",
        'end' => "$year-$month-22",
        'url' => "http://yahoo.com/"
    )
    
    );
    
    echo json_encode($json_array);
    

    【讨论】:

    • +1 击败了我。如果所有数据库列都是正确的名称,您应该能够删除分配并将 $row 推送到数组。
    • 你为什么要创建$row_array?为什么不SELECT id, title, '$year-month-10' as start,url FROM table,直接$return_arr[] = $row;
    • @Kevin,是的,你是对的。我实际上很快从一个自动完成示例中提取了这个,我必须为数组值分配不同的名称。所以 +1 就在你身边!
    • 是的,一个人在写一个时没有收到另一个评论待处理的警报:)
    • 我还是没明白。数组必须完全如上所示,否则信息不会显示在日历上。
    【解决方案2】:

    PDO 解决方案,只是为了更好的实现然后mysql_*

    $array = $pdo->query("SELECT id, title, '$year-month-10' as start,url 
      FROM table")->fetchAll(PDO::FETCH_ASSOC);
    echo json_encode($array);
    

    另一个不错的特点是它将整数保留为整数而不是字符串。

    【讨论】:

    • PDO 是当今 PHP 连接各种数据库的 事实标准,MySQL 就是其中之一。仍然在恕我直言中使用 mysql-extension 与仍然制作 HTML 3.2 页面一样糟糕。如果您的项目真的需要它,请继续,但新代码应该与它无关,如果不是PDO,至少使用mysqli(注意:'i'代表改进)。
    • 我必须使用 mysql,因为我无法使用其他的。
    • 我一直在玩 PDO。感谢您推动实际更新我的一些代码。它已经到位并在一些较旧的代码上运行。谢谢。
    【解决方案3】:

    Mysqli 用户的更新:

    $base= mysqli_connect($dbhost,  $dbuser, $dbpass, $dbbase);
    
    if (mysqli_connect_errno()) 
      die('Could not connect: ' . mysql_error());
    
    $return_arr = array();
    
    if ($result = mysqli_query( $base, $sql )){
        while ($row = mysqli_fetch_assoc($result)) {
        $row_array['id'] = $row['id'];
        $row_array['col1'] = $row['col1'];
        $row_array['col2'] = $row['col2'];
    
        array_push($return_arr,$row_array);
       }
     }
    
    mysqli_close($base);
    
    echo json_encode($return_arr);
    

    【讨论】:

    • 我尝试了 pdo 和 sqli,但我无法让数组正确记录。您正在使用echo json_encode($array);,它对我不起作用,但Echo $json->encode($arr); 对我起作用......为什么?我使用mysql_query 并创建一个mysql_fetch_object
    【解决方案4】:

    使用这个

    $array = array();
    $subArray=array();
    $sql_results = mysql_query('SELECT * FROM `location`');
    
    while($row = mysql_fetch_array($sql_results))
    {
        $subArray[location_id]=$row['location'];  //location_id is key and $row['location'] is value which come fron database.
        $subArray[x]=$row['x'];
        $subArray[y]=$row['y'];
    
    
     $array[] =  $subArray ;
    }
    echo'{"ProductsData":'.json_encode($array).'}';
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-09-22
      • 1970-01-01
      • 1970-01-01
      • 2014-03-01
      • 1970-01-01
      • 2014-04-26
      • 2016-02-21
      • 2016-04-12
      相关资源
      最近更新 更多