数据库元数据
表元数据
这些函数允许您获取表信息。
列出数据库中的表
$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->object
调用它<?php $db = db_connect(); $fields = $db->getFieldNames('table_name'); foreach ($fields as $field) { echo $field; }
2. 您可以通过从查询结果对象调用函数来收集与您运行的任何查询关联的字段名称
<?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;
}
如果您已经运行了查询,可以使用结果对象而不是提供表名
<?php
$db = db_connect();
$query = $db->query('YOUR QUERY');
$fields = $query->getFieldData();
如果您的数据库支持,以下数据可从此函数获取
name - 列名
type - 列的类型
max_length - 列的最大长度
primary_key - 整数
1
如果列是主键(所有整数1
,即使有多个主键),否则为整数0
(此字段目前仅适用于 MySQL 和 SQLite3)nullable - 布尔值
true
如果列可以为空,否则为布尔值false
default - 默认值
注意
从 v4.4.0 开始,SQLSRV 支持 nullable
。
列出表中的索引
$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
。