ThinkPHP5数据库实例详解

浏览21089
更新时间2022-01-20

getTableInfo 方法

1:功能:获取数据表信息

2:源码:/thinkphp/library/think/db/Query.php

3:参数与返回值

  • 方法原型:
  /**
   * 获取数据表信息
   * @access public
   * @param mixed  $tableName 数据表名 留空自动获取
   * @param string $fetch     获取信息类型 包括 fields type bind pk
   * @return mixed
   */
public function getTableInfo($tableName = '', $fetch = '') {
    //方法源码...
}
  • 参数
序号 参数 说明
1 数据表名 允许为空,如设置必须输入带前缀的完整表名称,如:tp5_staff
2 信息类型 数据表的描述信息,如字段名、字段类型、主键等,即返回数组的键名

  • 返回类型:

    返回一个二维数组:

    1. 键名是描述表的信息类型:fields(字段名),type(类型),bind(绑定参数),pk(主键)
    2. 每个元素值是一个由字段信息组成的一维数据,后面有实例,会再直观

4、实例演示:

任务1:获取tp5_staff表的全部信息:

  • Index.php 控制器代码:
<?php 
namespace app\index\controller;
use think\Db;

class Index {
    public function index(){

    //获取当前数据表的信息
    dump( Db::getTableInfo('tp5_staff'));
    }
}
  • 运行结果如下:
//返回结果是一个二维关联数组
array(4) {
//每个数组元素的键名,就是信息类型,可做为getTableInfo方法第二参数
//fields 获取字段名称
  ["fields"] => array(7) {
    [0] => string(2) "id"
    [1] => string(4) "name"
    [2] => string(3) "sex"
    [3] => string(3) "age"
    [4] => string(6) "salary"
    [5] => string(4) "dept"
    [6] => string(8) "hiredate"
  }
  //type  获取字段类型
  ["type"] => array(7) {
    ["id"] => string(15) "int(4) unsigned"
    ["name"] => string(11) "varchar(30)"
    ["sex"] => string(19) "tinyint(2) unsigned"
    ["age"] => string(19) "tinyint(3) unsigned"
    ["salary"] => string(19) "float(8,2) unsigned"
    ["dept"] => string(19) "tinyint(2) unsigned"
    ["hiredate"] => string(4) "date"
  }
  //获取数据表默认绑定信息
  ["bind"] => array(7) {
    ["id"] => int(1)
    ["name"] => int(2)
    ["sex"] => int(1)
    ["age"] => int(1)
    ["salary"] => int(1)
    ["dept"] => int(1)
    ["hiredate"] => int(2)
  }
  //获取表的主键
  ["pk"] => string(2) "id"
}

根据该方法的参数描述,我们知道,如果事先设定了默认数据表,第一个参数可省略,我们再次修改一下上面源码:

<?php 
namespace app\index\controller;
use think\Db;

class Index {
    public function index(){

    //设置默认数据表为:tp5_staff
    Db::setTable('tp5_staff');

    //获取当前数据表的信息
    dump( Db::getTableInfo();
    }
}

其运行结果与第一种方式完全一样,不再赘述。第二种方法,我们复习了之前的知识,提供了另外一种实现方式罢了,实际工作工,还是采用第一种方式更简洁:直接将完整表名写在参数中。


任务2:获取tp5_staff表的字段名称信息:

只需传入第二参数:fields,即上面二维数组结果中fields元素的键名

<?php 
namespace app\index\controller;
use think\Db;
class Index {
    public function index(){

    //获取当前数据表的字段名称信息
    dump( Db::getTableInfo('tp5_staff','fields'));
    }
}
  • 运行结果:
array(7) {
  [0] => string(2) "id"
  [1] => string(4) "name"
  [2] => string(3) "sex"
  [3] => string(3) "age"
  [4] => string(6) "salary"
  [5] => string(4) "dept"
  [6] => string(8) "hiredate"
}

框架还提供了一个更为简洁的方法:getTableFields方法,完成同样的功能,请注意参数类型,下面是修改后的Index.php 源码:

<?php 
namespace app\index\controller;
use think\Db;
class Index {

    public function index(){

    //获取当前数据表的字段名称信息
    dump( Db::getTableFields(['table'=>'tp5_staff']));
    }
}

该方法,官方手册中没有提及。
该方法的参数必须是数组类型,作用是给Query类查询参数数组$option['table']属性赋值:['table'=>'tp5_staff']

  • 我们看一下:getTableFields方法的源码:Query.php (1436 ~ 1400)
// 获取当前数据表字段信息
    public function getTableFields($options)
    {
        return $this->getTableInfo($options['table'], 'fields');
    }

可以看到内部仍然是用:getTableInfo方法来实现的,所以该方法本身只是getTableInfo($options['table'], 'fields') 的快捷方式罢了


任务3:获取tp5_staff表的字段类型信息:

  • 再次修改Index.php
<?php 
namespace app\index\controller;
use think\Db;
class Index {
    public function index(){

    //获取当前数据表的字段信息
    dump( Db::getTableInfo('tp5_staff','type'));
    }
}
  • 运行结果:
array(7) {
  ["id"] => string(15) "int(4) unsigned"
  ["name"] => string(11) "varchar(30)"
  ["sex"] => string(19) "tinyint(2) unsigned"
  ["age"] => string(19) "tinyint(3) unsigned"
  ["salary"] => string(19) "float(8,2) unsigned"
  ["dept"] => string(19) "tinyint(2) unsigned"
  ["hiredate"] => string(4) "date"
}

获取字段名称有快捷方式,那么获取字段类型有什么呢?答案是肯定的:getFieldsType方法,为节省篇幅,仅给给代码变化部分:

//获取当前数据表的字段信息
    dump( Db::getFieldsType( [ 'table'=>'tp5_staff' ] ) );

5、总结:

该方法比较简单,重点在于理解参数的含义,还有几个信息类型的获取留给读者完成:

  1. getTableInfo('tp5_staff','bind') :获取数据表绑定信息;
  2. getTableInfo('tp_staff','pk') :获取数据表的主键信息;
  3. 还有他们对应的快捷方式:getFieldsBind方法 ,getPk等

课后请独立上机练习一下,为后面课程打下基础

相关视频

更多

免费

php8,我来也
初级php8,我来也

34万次学习

收藏

免费

Thinkphp6.0正式版视频教程
中级Thinkphp6.0正式版视频教程

39.6万次学习

收藏

免费

细说PHP第一季
中级细说PHP第一季

31万次学习

收藏

精品课程

更多
前端入门_HTML5
前端入门_HTML5

共29课时

65万人学习

CSS视频教程-玉女心经版
CSS视频教程-玉女心经版

共25课时

41.3万人学习

JavaScript极速入门_玉女心经系列
JavaScript极速入门_玉女心经系列

共43课时

76.7万人学习

独孤九贱(1)_HTML5视频教程
独孤九贱(1)_HTML5视频教程

共25课时

64.1万人学习

独孤九贱(2)_CSS视频教程
独孤九贱(2)_CSS视频教程

共22课时

24.4万人学习

独孤九贱(3)_JavaScript视频教程
独孤九贱(3)_JavaScript视频教程

共28课时

36.2万人学习

独孤九贱(4)_PHP视频教程
独孤九贱(4)_PHP视频教程

共89课时

133.2万人学习

热门下载

更多
phpStudy 2018最新版
phpStudy 2018最新版

集成PHP7,16种组合,超全大合集

下载

VC9 32位
VC9 32位

VC9 32位 phpstudy集成安装环境运行库

下载

VC11 32位
VC11 32位

VC11 32位 phpstudy集成安装环境运行库​

下载

php程序员工具箱完整版
php程序员工具箱完整版

程序员工具箱 v1.0 php集成环境

下载

VC14 32位
VC14 32位

VC14 32位 phpstudy安装环境运行库

下载

SublimeText3汉化版
SublimeText3汉化版

中文版,非常好用

下载

Notepad++ Windows版
Notepad++ Windows版

Notepad++ 8.9.7 Windows版官方安装包,适合 Windows 用户进行代码编辑、文本处理、语法高亮和插件扩展配置。

下载