从mysql获取列名和行数据并创建json

时间:2014-03-10 16:19:26

标签: php mysql sql json pdo

这里我有一个数据库mysql:

enter image description here

我需要以这种格式制作一个json文件:

{"cols":[{"label":"ID","type":"number"},{"label":"Naziv","type":"string"},{"label":"Povrsina","type":"number"},{"label":"Lokacija","type":"string"},{"label":"Arkod ID","type":"number"},{"label":"Osnov koriscenja","type":"string"},{"label":"Kultura","type":"string"},{"label":"Naziv","type":"string"},{"label":"Navodnjavanje","type":"string"}],"rows":[{"c":[{"v":1},{"v":"Vinograd"},{"v":230457},{"v":"dole"},{"v":57875},{"v":"zakup zemlje"},{"v":"vocnjak"},{"v":"Vinograd"},{"v":"DA"}]},{"c":[{"v":2},{"v":"Njiva 3"},{"v":33445},{"v":"selo"},{"v":4564},{"v":"vlasnistvo"},{"v":"njiva"},{"v":"Njiva 3"},{"v":"da"}]},{"c":[{"v":3},{"v":"Vocnjak N"},{"v":230457},{"v":"iznad brdo"},{"v":57875},{"v":"zakup zemlje"},{"v":"vocnjak"},{"v":"Vocnjak N"},{"v":"da"}]},{"c":[{"v":4},{"v":"Njiva Dek"},{"v":33445},{"v":"selo"},{"v":4564},{"v":"vlasnistvo"},{"v":"njiva"},{"v":"Njiva Dek"},{"v":"da"}]}]}

我需要这种格式,因为我使用谷歌可视化API的数据。

现在我这样做是为了使用这段代码:

 try {
      $conn = new PDO("mysql:host=localhost;dbname=$dbname", $username, $password);
      $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

      $result = $conn->query('SELECT * FROM zemljiste');

      $rows = array();
      $table = array();
      $table['cols'] = array(

        array('label' => 'ID', 'type' => 'number'),
        array('label' => 'Naziv', 'type' => 'string'),
        array('label' => 'Povrsina', 'type' => 'number'),
        array('label' => 'Lokacija', 'type' => 'string'),
        array('label' => 'Arkod ID', 'type' => 'number'),   
        array('label' => 'Osnov koriscenja', 'type' => 'string'),
        array('label' => 'Kultura', 'type' => 'string'),
        array('label' => 'Naziv', 'type' => 'string'),
        array('label' => 'Navodnjavanje', 'type' => 'string')
    );
        foreach($result as $r) {

          $temp = array();

          $temp[] = array('v' => (int) $r['ID']); 
          $temp[] = array('v' => (string) $r['naziv']);
          $ha = (int)$r['ha'];
          $ar = (int)$r['ar'];
          $m2 = (int)$r['m2'];
          $povrsina = $ha*10000+$ar*100+$m2;
          $temp[] = array('v' => (int) $povrsina); 
          $temp[] = array('v' => (string) $r['lokacija']);
          $temp[] = array('v' => (int) $r['arkod']);
          $temp[] = array('v' => (string) $r['osnov']);
          $temp[] = array('v' => (string) $r['kat_kul']);
          $temp[] = array('v' => (string) $r['naziv']);
          $temp[] = array('v' => (string) $r['navodnjavanje']);


          $rows[] = array('c' => $temp);
        }

    $table['rows'] = $rows;

    // convert data into JSON format
    $jsonTable = json_encode($table);
    //echo $jsonTable;
    } catch(PDOException $e) {
        echo 'ERROR: ' . $e->getMessage();
    }
    echo $jsonTable;

但是可以自动获取列名,然后获取行数据,然后以我上面提到的格式创建JSON吗?

为什么我需要这个? Becouse我有很多表,我需要为每个表创建manualy创建php文件...

所以我需要一些解决方案,并获得自动列名,行数据和创建JSON。

1 个答案:

答案 0 :(得分:3)

请阅读PDOStatement.fetchAll方法。您还可以使用fetchfetchAll来构建数组。

您可以将获取样式作为参数传递。

例如PDO::FETCH_NAMED

$result = $query->fetchAll(PDO::FETCH_NAMED);

将使用列名创建关联数组,这将为您节省大量代码。