前言[随时更新]
MySQL快速复习
MySQL原生查询
选择数据表
删除数据
聚合查询
时间查询
视图查询
子查询
总结/参考

/**
* 获取数据表信息
* @access public
* @param mixed $tableName 数据表名 留空自动获取
* @param string $fetch 获取信息类型 包括 fields type bind pk
* @return mixed
*/
public function getTableInfo($tableName = '', $fetch = '') {
//方法源码...
}
| 序号 | 参数 | 说明 |
|---|---|---|
| 1 | 数据表名 | 允许为空,如设置必须输入带前缀的完整表名称,如:tp5_staff |
| 2 | 信息类型 | 数据表的描述信息,如字段名、字段类型、主键等,即返回数组的键名 |
返回一个二维数组:
- 键名是描述表的信息类型:fields(字段名),type(类型),bind(绑定参数),pk(主键)
- 每个元素值是一个由字段信息组成的一维数据,后面有实例,会再直观
<?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();
}
}
其运行结果与第一种方式完全一样,不再赘述。第二种方法,我们复习了之前的知识,提供了另外一种实现方式罢了,实际工作工,还是采用第一种方式更简洁:直接将完整表名写在参数中。
只需传入第二参数: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']
// 获取当前数据表字段信息
public function getTableFields($options)
{
return $this->getTableInfo($options['table'], 'fields');
}
可以看到内部仍然是用:getTableInfo方法来实现的,所以该方法本身只是getTableInfo($options['table'], 'fields') 的快捷方式罢了
<?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' ] ) );
该方法比较简单,重点在于理解参数的含义,还有几个信息类型的获取留给读者完成:
- getTableInfo('tp5_staff','bind') :获取数据表绑定信息;
- getTableInfo('tp_staff','pk') :获取数据表的主键信息;
- 还有他们对应的快捷方式:getFieldsBind方法 ,getPk等