db_pdo::getFields PHP Method

getFields() public method

取得数据表的字段信息
public getFields ( $tableName )
    public function getFields($tableName)
    {
        $this->initConnect(true);
        //if(C('DB_DESCRIBE_TABLE_SQL')) {
        // 定义特殊的字段查询SQL
        //  $sql   = str_replace('%table%',$tableName,C('DB_DESCRIBE_TABLE_SQL'));
        // }else{
        switch ($this->dbType) {
            case 'MSSQL':
            case 'SQLSRV':
                $sql = "SELECT   column_name as 'Name',   data_type as 'Type',   column_default as 'Default',   is_nullable as 'Null'\n        FROM    information_schema.tables AS t\n        JOIN    information_schema.columns AS c\n        ON  t.table_catalog = c.table_catalog\n        AND t.table_schema  = c.table_schema\n        AND t.table_name    = c.table_name\n        WHERE   t.table_name = '{$tableName}'";
                break;
            case 'SQLITE':
                $sql = 'PRAGMA table_info (' . $tableName . ') ';
                break;
            case 'ORACLE':
            case 'OCI':
                $sql = "SELECT a.column_name \"Name\",data_type \"Type\",decode(nullable,'Y',0,1) notnull,data_default \"Default\",decode(a.column_name,b.column_name,1,0) \"pk\" " . "FROM user_tab_columns a,(SELECT column_name FROM user_constraints c,user_cons_columns col " . "WHERE c.constraint_name=col.constraint_name AND c.constraint_type='P' and c.table_name='" . strtoupper($tableName) . "') b where table_name='" . strtoupper($tableName) . "' and a.column_name=b.column_name(+)";
                break;
            case 'PGSQL':
                $sql = 'select fields_name as "Name",fields_type as "Type",fields_not_null as "Null",fields_key_name as "Key",fields_default as "Default",fields_default as "Extra" from table_msg(' . $tableName . ');';
                break;
            case 'IBASE':
                break;
            case 'MYSQL':
            default:
                $sql = 'DESCRIBE ' . $tableName;
                //备注: 驱动类不只针对mysql,不能加``
        }
        // }
        $result = $this->query($sql);
        $info = array();
        if ($result) {
            foreach ($result as $key => $val) {
                $val = array_change_key_case($val);
                $val['name'] = isset($val['name']) ? $val['name'] : "";
                $val['type'] = isset($val['type']) ? $val['type'] : "";
                $name = isset($val['field']) ? $val['field'] : $val['name'];
                $info[$name] = array('name' => $name, 'type' => $val['type'], 'notnull' => (bool) (isset($val['null']) && $val['null'] === '' || isset($val['notnull']) && $val['notnull'] === ''), 'default' => isset($val['default']) ? $val['default'] : (isset($val['dflt_value']) ? $val['dflt_value'] : ""), 'primary' => isset($val['key']) ? strtolower($val['key']) == 'pri' : (isset($val['pk']) ? $val['pk'] : false), 'autoinc' => isset($val['extra']) ? strtolower($val['extra']) == 'auto_increment' : (isset($val['key']) ? $val['key'] : false));
            }
        }
        return $info;
    }