2012-06-12 96 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