技术相关 · 2014年7月19日

PHP获取MySQL数据表的结构信息(包括set结构的值)

在PHP官网上找到的一个获取MySQL数据表的结构信息的函数,稍微改进了下,替换掉过时的ereg函数。现在
这个函数比mysql_list_fields要强大,它能获取到集合结构(set)字段的所有值,这在生成HTML时是非常
有用的。

上代码:

function GetFieldInfo($table) { 
  global $cfg_dbname,$cfg_dbhost,$cfg_dbuser,$cfg_dbpwd;
  $con = mysql_connect($cfg_dbhost, $cfg_dbuser, $cfg_dbpwd);
if (!$con)
  {
  die('Could not connect: ' . mysql_error());
  }

$db_selected = mysql_select_db($cfg_dbname,$con);
  mysql_query("set names utf8");
  if($table == '') return false; 
  $fields = mysql_list_fields($cfg_dbname, $table); 
  if($fields){ 
    $columns = mysql_query('show columns from ' . $table); 
    if($columns){ 
      $num = mysql_num_fields($fields); 
      for($i=0; $i < $num; ++$i){ 
        $column = mysql_fetch_array($columns); 
        $field = mysql_fetch_field($fields, $i); 
        $flags = mysql_field_flags($fields, $i); 
        if($flags == '') $flags=array(); 
        else $flags = explode(' ',$flags); 
        if (preg_match('/enum.(.*)./',$column['Type'],$match)) 
          $field->values = explode(',',$match[1]); 
        if (preg_match('/set.(.*)./',$column['Type'],$match)) 
          $field->values = explode(',',$match[1]); 
        if(!$field->values) $field->values = array(); 
        $field->flags = $flags; 
        $field->len = mysql_field_len($fields, $i); 
        $result_fields[$field->name] = $field; 
        $result_fields[$i] = $field; 
      } 
      mysql_free_result($columns); 
    } 
    mysql_free_result($fields); 
    return $result_fields; 
  } 
  return false; 
}