データベースメタデータ

テーブルメタデータ

これらの関数を使用すると、テーブル情報を取得できます。

データベース内のテーブルのリスト

$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()

フィールド名を含む配列を返します。このクエリは2つの方法で呼び出すことができます

  1. 1. テーブル名を指定して、$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 - 列が NULL 可能である場合はブール値 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 を使用します。