1

$db[]すべてのデータベースデータをおよび/またはに「自動的に」ロードしたい$_SESSION['db']。したがって、Webサイト全体に断片をロードするのではなく、このコードを1回ロードするだけで済みます。

メタデータと生データをクエリできました。問題は配列の作成です。

temp列のあるテーブルがあり、次のようなことができるようにしたいとしますname。-明らかに、列のあるテーブルがたくさんあります。これは単なる例ですageecho $db['temp']['name'] . "'s age is: " . $db['temp']['age'];

<?php
$dbn = "db_name";
$dbu = "db_user";
$dbp = "db_password";
$hst = 'db_host';

$dbc = mysql_connect($hst,$dbu,$dbp);


$sql_metadata = 
"SELECT `COLUMNS`.`TABLE_NAME` as 'table' , `COLUMNS`.`COLUMN_NAME` as 'column'
FROM `information_schema`.COLUMNS
WHERE `COLUMNS`.`TABLE_SCHEMA` = '$dbn'
ORDER BY TABLE_NAME ASC , `COLUMNS`.`COLUMN_NAME` ASC";

$dbq = mysql_query($sql_metadata, $dbc);
while( $meta = mysql_fetch_array($dbq) )
{
    $sql_rawdata = "SELECT `$meta['column']` FROM `$dbn`.`$meta['table']`";
    $dbq2 = mysql_query($sql_rawdata);
    foreach( ($raw = mysql_fetch_array($dbq2)) as $value) )
    {
        $db = array
                ( 
                $meta['table'] => array( $meta['column'] => $value)
                );
    }
}
print_r($db);
?>
4

1 に答える 1

2

ループに入る前に配列を宣言してから、次のように入力します。

$db = array();

$sql_metadata = 
"SELECT DISTINCT `COLUMNS`.`TABLE_NAME` as 'table' 
FROM `information_schema`.COLUMNS 
WHERE `COLUMNS`.`TABLE_SCHEMA` = '$dbn'";

$dbq = mysql_query($sql_metadata, $dbc);
while( $meta = mysql_fetch_array($dbq) )
{
    $sql_rawdata = "SELECT `$meta['column']` FROM `$dbn`.`$meta['table']`";
    $dbq2 = mysql_query($sql_rawdata);
    $raw = mysql_fetch_array($dbq2);

    foreach($raw as $value )
    {
        $db[$meta['table']][$meta['column']][] = $value;
    }
}
print_r($db);

説明のために:テーブル名が列名を指す多次元配列を作成します。配列の最後にある[]は、$valueの内容をtable=>columnの新しい配列要素に格納するようにPHPに指示します。

これは、データ全体をフェッチするためのより簡単な方法です。

    $sql_rawdata = "SELECT * FROM `".$dbn."`.`".$meta['table']."`";
    $dbq2 = mysql_query($sql_rawdata);

    while($raw = mysql_fetch_assoc($dbq2)){
        foreach($raw as $column => $value )
        {
            $db[$meta['table']][$column][] = $value;
        }
    }
于 2012-06-12T05:15:50.910 に答える