获取元数据
表元数据
这些方法让你可以获取表信息。
列出数据库中的所有表
$db->listTables()
返回一个数组,其中包含当前连接的数据库中所有表的名称。示例:
<?php
$db = db_connect();
$tables = $db->listTables();
foreach ($tables as $table) {
echo $table;
}
备注
某些驱动程序包含额外的系统表,这些表不会包含在此返回结果中。
确定表是否存在
$db->tableExists()
在对某个特定表执行操作之前,知道该表是否存在会很有帮助。此方法返回布尔值 true/false。用法示例:
<?php
$db = db_connect();
if ($db->tableExists('table_name')) {
// some code...
}
备注
将 table_name 替换为你正在查找的表名。
字段元数据
列出表中的所有字段
$db->getFieldNames()
返回一个包含字段名称的数组。此查询可以通过两种方式调用:
你可以提供表名,并从
$db对象调用:<?php $db = db_connect(); $fields = $db->getFieldNames('table_name'); foreach ($fields as $field) { echo $field; }
你可以通过从查询结果对象调用该方法,来获取你运行的任何查询所关联的字段名称:
<?php $db = db_connect(); $query = $db->query('SELECT * FROM some_table'); foreach ($query->getFieldNames() as $field) { echo $field; }
确定字段是否存在于表中
$db->fieldExists()
在执行某个操作之前,知道特定字段是否存在会很有帮助。此方法返回布尔值 true/false。用法示例:
<?php
$db = db_connect();
if ($db->fieldExists('field_name', 'table_name')) {
// some code...
}
备注
将 field_name 和 table_name 分别替换为你正在查找的列名和表名。
获取字段元数据
$db->getFieldData()
返回一个包含字段信息的对象数组。
有时收集字段名称或其他元数据(如列类型、最大长度等)会很有帮助。
备注
并非所有数据库都提供元数据。
用法示例:
<?php
$db = db_connect();
$fields = $db->getFieldData('table_name');
foreach ($fields as $field) {
echo $field->name;
echo $field->type;
echo $field->max_length;
echo $field->primary_key;
}
如果数据库支持,此函数可返回以下数据:
name- 字段名type- 字段的类型max_length- 字段的最大长度nullable- 如果字段可为空则为布尔值true,否则为布尔值falsedefault- 默认值primary_key- 如果字段是主键则为整数1(即使存在多个主键,也全为整数1),否则为整数0(此字段当前仅在MySQLi和SQLite3中可用)
备注
自 v4.4.0 版本起,SQLSRV 支持 nullable。
$query->getFieldData()
如果已经执行过查询,可以使用结果对象代替提供表名:
<?php
$db = db_connect();
$query = $db->query('YOUR QUERY');
$fields = $query->getFieldData();
备注
返回的数据与 $db->getFieldData() 返回的数据不同。如果无法获取所需数据,请使用 $db->getFieldData()。
列出表中的所有索引
$db->getIndexData()
返回一个包含索引信息的对象数组。
用法示例:
<?php
$db = db_connect();
$keys = $db->getIndexData('table_name');
foreach ($keys as $key) {
echo $key->name;
echo $key->type;
echo $key->fields; // array of field names
}
键的类型可能因你使用的数据库而异。例如,MySQL 会为表关联的每个键返回 primary、fulltext、spatial、index 或 unique 中的一种。
SQLite3 会返回一个名为 PRIMARY 的伪索引。但它是一个特殊索引,不能在 SQL 命令中使用。
$db->getForeignKeyData()
返回一个包含外键信息的对象数组。
用法示例:
<?php
$db = db_connect();
$keys = $db->getForeignKeyData('table_name');
foreach ($keys as $key => $object) {
echo $key === $object->constraint_name;
echo $object->constraint_name;
echo $object->table_name;
echo $object->column_name[0]; // array
echo $object->foreign_table_name;
echo $object->foreign_column_name[0]; // array
echo $object->on_delete;
echo $object->on_update;
echo $object->match;
}
外键使用 tableprefix_table_column1_column2_foreign 命名约定。Oracle 使用略有不同的后缀 _fk。