【问题标题】:how to generate JSON array for entire database tables from MySQL database using PHP如何使用 PHP 从 MySQL 数据库中为整个数据库表生成 JSON 数组
【发布时间】:2015-06-18 10:59:05
【问题描述】:

我想要这种 JSON 数组, database1 所有表

{
    {"table1":"[{"key11":"val11"},{"key12":"val12"},{"key13":"val13"}]"},
    {"table2":"[{"key21":"val21"},{"key22":"val22"},{"key23":"val23"}]"},
    {"table3":"[{"key31":"val31"},{"key32":"val32"},{"key33":"val33"}]"},
    {"table4":"[{"key41":"val41"},{"key42":"val42"},{"key43":"val43"}]"},
    {"table5":"[{"key51":"val51"},{"key52":"val52"},{"key53":"val53"}]"},
}

下面的代码是将单个数据库表转换为 JSON 数组,但我希望将整个数据库表转换为 JSON 数组

    $return_arr = array();
    $fetch = mysql_query("SELECT * FROM table1");   
    while ($row = mysql_fetch_array($fetch, MYSQL_ASSOC)) {
        $row_array['val2'] = $row['val1'];
        $row_array['val2'] = $row['val2'];
        $row_array['val3'] = $row['val3'];      
        array_push($return_arr,$row_array);
    }   
    echo json_encode($return_arr);

请任何人帮助我。

【问题讨论】:

  • 你的意思是整个数据库或特定的表
  • 是的整个数据库,我有特定表的代码。我想将特定数据库和所有表格转换成上述格式,请回答。
  • 你只需要表格名称或表格中的整个条目。
  • 我想要表格中的所有条目以及单个数据库中的所有表格,请回答。

标签: php mysql arrays json


【解决方案1】:

遍历所有表,您可以使用该查询来获取所有表。

select * from information_schema.tables

您仍然需要选择表格内的所有结果。

【讨论】:

    【解决方案2】:

    类似这样的:

    $db='recipes';
    $tables=$db->query('SHOW TABLES IN '.$db, O_ARRAY);
    foreach($tables as $n=>$v){
        $table=$v['Tables_in_'.$db];
        $array=$db->query("SELECT * FROM $table");
        $data[$table]=$array;
    }
    echo '<pre>';
    echo json_encode($data);
    

    在大数据上这将是相当大的内存密集型!您可以为不需要的字段添加一些过滤器,或者需要跳过特定于数据库的字段或将值转换到另一个地方。

    【讨论】:

    • 是的,我想要这种格式,但是我可以运行显示空白页面吗,请您简化到 WAMP 服务器。 mysql_connect('localhost','root',''); mysql_select_db('recipes'); $db='recipes'; $tables=mysql_query('SHOW TABLES IN '.$db); foreach($tables as $v) { echo $table=$v['Tables_in_'.$db]; $array=mysql_query("SELECT * FROM $table"); $data[$table]=$array; } echo '&lt;pre&gt;'; echo json_encode($data);此代码显示输出为空,请更正我的代码。
    • mysql_connect('localhost','root',''); mysql_select_db('recipes'); $db='recipes'; $tables=mysql_query('SHOW TABLES IN '.$db); foreach($tables as $v) { echo $table=$v['Tables_in_'.$db]; $array=mysql_query("SELECT * FROM $table"); $data[$table]=$array; } echo '&lt;pre&gt;'; echo json_encode($data);
    【解决方案3】:

    这是上述问题更改数据库名称的答案,只有所有表和表记录都以 JSON 数组格式给出。

        mysql_connect('localhost','root','');
        mysql_select_db('database');
        $db='database'; 
    
        $return_arr = array();
        $return_arr1 = array();
        $return_arr2 = array(); 
        $return_arr3 = array();
        $result = mysql_query("SHOW TABLES IN ".$db); 
        while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
            array_push($return_arr,$row);
        }
        foreach($return_arr as $key => $value)
        {
            $table=$value['Tables_in_'.$db];
            $array1=mysql_query("SELECT * FROM $table");        
            while ($row1 = mysql_fetch_array($array1, MYSQL_ASSOC)) 
            {
                array_push($return_arr3,$row1);
            }       
                $return_arr1[$table]=$return_arr3;
                unset($return_arr3);
                $return_arr3 =array();
        }
        echo '<pre>';
        print_r($return_arr1);
    

    【讨论】:

    • 除了db连接,这个答案和我指定的基本一样。由于您有 4 个不同的阵列,我的可能会占用更少的内存。但由于我使用特殊的数据库方法,它可能是一个折腾
    猜你喜欢
    • 2011-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-30
    • 2011-07-16
    • 2011-02-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多