如何在zend中获取数据库中表的列名?

时间:2015-03-05 07:58:24

标签: php mysql zend-framework

我在zend中创建一个应用程序,用户将输入主机,数据库名称,用户名和密码来连接数据库,并且能够检索表中的表和列以开始一些工作..

我正在使用此代码来获取数据库中的表:

$ExternalDb = new Zend_Db_Adapter_Pdo_Mysql(array(
    'host'     => $host,
    'username' => $user,
    'password' => $pass,
    'dbname'   => $dbName
));

try{
    //Create connection
    echo $ExternalDb->getConnection()->getAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY);

    foreach($ExternalDb->listTables() as $table){

      //$table = new $table(array('db' => $ExternalDb)); it doesn't work
        echo "<pre>";
        print_r($table);
      //$cols = $table->info(Zend_Db_Table_Abstract::COLS); It doesn't work
        echo "</pre>";

    }

} catch (Exception $ex) {
    echo $ex;
}

我能够获取表名,但我也试图获取列名......

提前致谢!

2 个答案:

答案 0 :(得分:2)

您可以从Zend_Db_Table_Abstract检索信息。

像这样创建一个新类:

class foo extends Zend_Db_Table_Abstract
{
}

在您的代码中:

foreach($ExternalDb->listTables() as $table){
    $dbTable = new foo($ExternalDb);            
    $dbTable->setOptions(array($dbTable::NAME => $table));
    var_dump($dbTable->info($dbTable::COLS));
    unset($dbTable);
}

答案 1 :(得分:1)

没有Zend_Db_Table_Abstract的另一种方式,直接使用Zend_Db_Adapter,您可以使用describeTable()方法:

foreach($ExternalDb->listTables() as $table){    
    $describ = $ExternalDb->describeTable($table);
    foreach($describ as $col_name => $col_desc){
        var_dump($col_name);
    }
}