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