2012-06-12 126 views
1

我想「自動」將我所有的數據庫數據加載到和/或$_SESSION['db']。因此,我只需加載一次該代碼,而不是在整個網站中加載一些小部分。PHP:用整個數據庫數據創建一個數組

我能夠查詢元數據和原始數據,我的問題是創建數組。

比方說,我有一個表temp的列nameage我希望能夠做這樣的事情:echo $db['temp']['name'] . "'s age is: " . $db['temp']['age']; -Obviously我有很多包含大量列的表。這只是一個例子

<?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); 
?> 
+0

我們強烈不推薦的,如果你是一個共享的主機上,在服務器上的任何人都可以從'/ tmp目錄/' – Adi

+0

如何讀取數據庫你有沒有想到他的db存儲在tmp/-folder中? AFAIK所有表都存儲在MySQL安裝文件夾中的一個名爲「data」的子文件夾中... – Corsair

+0

出於好奇;這是什麼目的? – Repox

回答

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); 

爲了闡述的:你創建一個表名朝柱指着一個多維數組名。數組末尾的[]告訴PHP將$ value的內容存儲到table =>列的新數組元素中。

這將是獲取整個數據更簡單的方法:

$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; 
     } 
    } 
+0

我仍然有相同的編碼錯誤:'分析錯誤:語法錯誤,意外的T_ENCAPSED_AND_WHITESPACE,期望T_STRING或T_VARIABLE或T_NUM_STRING在第21行的db.php中# – Omar

+0

您沒有在第一篇文章中提及;-)並且我沒有看到第一個錯誤,這是您的括號中的結果,循環doesen甚至不會創建變量$ value。看看我的編輯。 – Corsair

+0

我應該更具體一些,而不是僅僅說「......我的問題是創建數組」:P錯誤來自這一行:'$ sql_rawdata =「SELECT $ meta ['column'] FROM $ dbn。$ meta ['table']「;' – Omar