DBUtil クラス

DBUtil クラスは、データベースに対するルーチン操作を管理し、行なうことを可能にします。

関数を利用する

DBUtil は、データベースのカラムを作成、リネーム、変更、および削除することを可能にします。

set_connection($connection)

set_connection メソッドは、すべてのメソッドのための、デフォルトのデータベース接続をセットします。

静的 はい
パラメータ
パラメータ デフォルト 説明
$connection 必須 データベース接続
返り値 影響する行の数
例外 失敗時に \Database_Exception が発生
// DBUtil の代替データベース接続を設定
DBUtil::set_connection('my_database_group');

// そのコネクションを用いて他の DBUtil を呼び出す
...

// デフォルトに戻す
DBUtil::set_connection(null);

create_database($database, $charset = null, $if_not_exists = true, $db = null)

create_database メソッドは、データベースを作成します。もし失敗した場合には、例外 Database_Exception がスローされます。

静的 はい
パラメータ
パラメータ デフォルト 説明
$database 必須 データベース名
$charset null デフォルトの文字コード
$if_not_exists true IF NOT EXISTSをつけるかどうか
$db
null
データベース接続
返り値 影響する行の数
例外 失敗時に \Database_Exception が発生
// `my_database` というデータベースを作成します。
DBUtil::create_database('my_database');

// 例外を捕捉
try
{
	DBUtil::create_database('my_database');
}
catch(\Database_Exception $e)
{
	// 生成に失敗...
}

// デフォルトの文字コードもセットできます。
// `new_database` が存在しなければ、デフォルトの文字コードセットを `utf8` としてデータベースを作成
DBUtil::create_database('new_database', 'utf8');

// `new_database` が存在しなければ、デフォルトの文字コードセットを `utf8` 、collate を `utf8_unicode_ci` としてデータベースを作成
DBUtil::create_database('new_database', 'utf8_unicode_ci');

もし、文字コードが指定されなかった場合、アクティブな DB グループの文字コードが適用されます。

drop_database($database, $db = null)

drop_database メソッドは、データベースを削除します。もし失敗した場合には、例外 Database_Exception がスローされます。

静的 はい
パラメータ
パラメータ デフォルト 説明
$database 必須 データベース名
$db
null
データベース接続
返り値 影響する行の数
例外 失敗時には \Database_Exception が発生
// `my_database` という名前のデータベースを削除
DBUtil::drop_database('my_database');

// 例外を捕捉
try
{
	DBUtil::drop_database('my_database');
}
catch(\Database_Exception $e)
{
	// 削除失敗...
}

table_exists($table, $db = null)

table_exists メソッドは、与えられたテーブルが存在するかチェックします。

静的 はい
パラメータ
パラメータ デフォルト 説明
$table 必須 テーブル名
$db
null
データベース接続
返り値 テーブルが存在する場合は true、存在しない場合は false が返ります
// `my_table` テーブルが存在するか確かめる
if(DBUtil::table_exists('my_table'))
{
	// テーブルが存在する
} else
{
	// テーブルが存在しなければ作成
}
								

drop_table($table, $db = null)

drop_table メソッドは、テーブルを削除します。もし失敗した場合には、例外 Database_Exception がスローされます。

静的 はい
パラメータ
パラメータ デフォルト 説明
$table 必須 テーブル名
$db
null
データベース接続
返り値 影響する行の数
例外 失敗時には \Database_Exception が発生
// `my_table` というテーブルを削除します。
DBUtil::drop_table('my_table');

// 例外を捕捉
try
{
	DBUtil::drop_table('my_table');
}
catch(\Database_Exception $e)
{
	// 削除失敗...
}

rename_table($table, $new_table_name, $db = null)

rename_table メソッドは、テーブルをリネームします。

静的 はい
パラメータ
パラメータ デフォルト 説明
$table 必須 古いテーブル名
$new_table_name 必須 新しいテーブル名
返り値 影響する行の数
例外 失敗時には \Database_Exception が発生
// `my_table` というテーブルを `my_new_table` にリネームします。
DBUtil::rename_table('my_table', 'my_new_table');

// 例外を捕捉
try
{
	DBUtil::rename_table('my_table', 'my_new_table');
}
catch(\Database_Exception $e)
{
	// リネーム失敗...
}

create_table($table, $fields, $primary_keys = array(), $if_not_exists = true, $engine = false, $charset = null, $foreign_keys = array(), $db = null)

create_table メソッドは、テーブルを作成します。

静的 はい
パラメータ
パラメータ デフォルト 説明
$table 必須 テーブル名
$fields 必須 フィールドを含む配列
$primary_keys array() プライマリキーを含む配列
$if_not_exists true IF NOT EXISTS を使うかどうか
$engine false どのストレージエンジン (MyISAM, InnoDB, ...) を使うか
$charset
null
デフォルトの文字セット。指定しないとアクティブな DB グループの文字セットが使われる
$foreign_keys array() 外部キー制約の定義を含む配列。配列のキーとして 'key' と 'reference' が必要で、これらがないとエラーが発生する。それ以外は任意指定。
$db
null
データベース接続
返り値 影響する行の数
例外 失敗時に \Database_Exception
\DBUtil::create_table(
	'users',
	array(
		'id' => array('constraint' => 11, 'type' => 'int', 'auto_increment' => true),
		'name' => array('type' => 'text'),
		'email' => array('constraint' => 50, 'type' => 'varchar'),
		'title' => array('constraint' => 50, 'type' => 'varchar', 'default' => 'mr.'),
		'password' => array('constraint' => 125, 'type' => 'varchar'),
	),
	array('id'), false, 'InnoDB', 'utf8_unicode_ci',
	array(
		array(
			'constraint' => 'constraintA',
			'key' => 'keyA',
			'reference' => array(
				'table' => 'table',
				'column' => 'field',
			),
			'on_update' => 'CASCADE',
			'on_delete' => 'RESTRICT'
		),
		array(
			'key' => 'keyB',
			'reference' => array(
				'table' => 'table',
				'column' => array(
					'fieldA',
					'fieldB'
				),
			),
		),
	),
);

/* 以下の SQL 文が生成される:
CREATE TABLE `users` (
	`id` int(11) NOT NULL AUTO_INCREMENT,
	`name` text NOT NULL,
	`email` varchar(50) NOT NULL,
	`title` varchar(50) DEFAULT 'mr.' NOT NULL,
	`password` varchar(125) NOT NULL,
	PRIMARY KEY `id` (`id`),
	CONSTRAINT constraintA FOREIGN KEY (keyA) REFERENCES table (field) ON UPDATE CASCADE ON DELETE RESTRICT,
	FOREIGN KEY (keyB) REFERENCES table (fieldA, fieldB)
) ENGINE = InnoDB  DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;
*/
指定可能なパラメータ
パラメータ 説明
name フィールド名
type フィールドの型 (varchar, enum, text, ...)
constraint 長さ。配列で指定することも可能
charset 文字セット
unsigned boolean 値で、符号なしの時は true 。デフォルトは false
default デフォルト値
null boolean 値で、null を許可する時は true 。デフォルトは false
auto_increment オートインクリメントを使う時は true に設定する
comment フィールドにコメントを追加する

フィールドのデフォルト値は自動的にエスケープされます。エスケープしてほしくない場合には、 DB::expr を使います。

\DBUtil::create_table('users', array(
	'id' => array('constraint' => 11, 'type' => 'int', 'auto_increment' => true),
	'name' => array('type' => 'text'),
	'email' => array('constraint' => 50, 'type' => 'varchar'),
	'title' => array('constraint' => 50, 'type' => 'varchar', 'default' => 'mr.'),
	'created' => array('type' => 'timestamp', 'default' => \DB::expr('CURRENT_TIMESTAMP')),
	'password' => array('constraint' => 125, 'type' => 'varchar'),
), array('id'));

値のエスケープは DBUtil::add_fields と DBUtil::modify_fields についても同様の動作をします。

field_exists($table, $columns, $db = null)

field_exists メソッドは、与えられたテーブルに与えられたカラムが存在しているかチェックします。

静的 はい
パラメータ
パラメータ デフォルト 説明
$table 必須 テーブル名
$columns 必須 フィールドを含む配列
$db
null
データベース接続
返り値 フィールド/カラムが存在すれば true、存在しなければ false

if(DBUtil::field_exists('my_table', array('my_field_or_column')))
{
	// フィールドが存在する
}
else
{
	// このテーブルではフィールドが存在しない
}
								

add_fields($table, $fields, $db = null)

add_fields メソッドは、テーブルにカラムを追加します。

静的 はい
パラメータ
パラメータ デフォルト 説明
$table 必須 テーブル名
$fields 必須 フィールドを含む配列
$db
null
データベース接続
返り値 影響する行の数
例外 失敗時に \Database_Exception
\DBUtil::add_fields('users', array(
	'surname' => array('constraint' => 100, 'type' => 'varchar'),
	'twitter_name' => array('constraint' => 100, 'type' => 'varchar'),
));

drop_fields($table, $fields, $db = null)

drop_fieldsメソッドは、テーブルからカラムを削除します。

静的 はい
パラメータ
パラメータ デフォルト 説明
$table 必須 テーブル名
$fields 必須 フィールドを含む文字列か配列
$db
null
データベース接続
返り値 影響する行の数
例外 失敗時に \Database_Exception
\DBUtil::drop_fields('users', 'surname');

modify_fields($table, $fields, $db = null)

modify_fields メソッドは、テーブルのカラムを変更します。

静的 はい
パラメータ
パラメータ デフォルト 説明
$table 必須 テーブル名
$fields 必須 フィールドを含む配列
$db
null
データベース接続
返り値 影響する行の数
例外 失敗時に\Database_Exception
\DBUtil::modify_fields('users2', array(
	'name' => array('constraint' => 100, 'type' => 'varchar', 'charset' => 'utf8_general_ci'),
	'title' => array('constraint' => 50, 'type' => 'varchar', 'default' => 'mrs.'),
));

create_index($table, $index_columns, $index_name, $index = '', $db = null)

create_index メソッドは、テーブルにインデックスを追加します。

静的 はい
パラメータ
パラメータ デフォルト 説明
$table 必須 テーブル名
$index_columns 必須 フィールドを含む文字列または文字列の配列
$index_name 任意 作成するインデックスの名前
$index 任意 作成するインデックスの種類。
現時点でサポートされているのは、UNIQUE、FULLTEXT、SPATIAL、NONCLUSTERED
$db
null
データベース接続
返り値 影響する行の数
例外 失敗時に \Database_Exception
\DBUtil::create_index('table', 'name');
// CREATE INDEX name ON table ( `name` ) を生成

\DBUtil::create_index('table', array('nameA', 'nameB'), 'name');
// CREATE INDEX name ON table ( `nameA`, `nameB` ) を生成

\DBUtil::create_index('table', array('nameA' => 'ASC', 'nameB'), 'name', 'fulltext');
// CREATE FULLTEXT INDEX name ON table ( `nameA` ASC, `nameB` ) を生成

drop_index($table, $index_name, $db = null)

drop_index メソッドは、テーブルからインデックスを削除します。

静的 はい
パラメータ
パラメータ デフォルト 説明
$table 必須 テーブル名
$index_name 必須 削除するインデックスの名前
$db
null
データベース接続
返り値 データベース操作の結果
例外 失敗時に \Database_Exception
\DBUtil::drop_index('table', 'name');
// DROP INDEX name ON table を生成

add_foregin_key($table, $foreign_key)

add_foreign_key メソッドは、既存テーブルに外部キーを追加します。

静的 はい
パラメータ
パラメータ デフォルト 説明
$table 必須 テーブル名
$foreign_key 必須 外部キー定義を含む配列
返り値 データベース操作の結果
例外 不正な入力時に \InvalidArgumentException 、失敗時に \Database_Exception
\DBUtil::add_foreign_key('users', array(
	'constraint' => 'constraintA',
	'key' => 'keyA',
	'reference' => array(
		'table' => 'table',
		'column' => 'field',
	),
	'on_update' => 'CASCADE',
	'on_delete' => 'RESTRICT'
));

drop_foreign_key($table, $fk_name)

drop_foreign_key メソッドは、テーブルから外部キーを削除します。

静的 はい
パラメータ
パラメータ デフォルト 説明
$table 必須 テーブル名
$fk_name 必須 削除する外部キーの名前
返り値 データベース操作の結果
例外 失敗時に\Database_Exception
\DBUtil::drop_foreign_key('table', 'name');
// ALTER TABLE `table` DROP FOREIGN KEY name を生成

データベースの操作

truncate_table($table, $db = null)

truncate_table メソッドは、テーブルを切りつめます。

静的 はい
パラメータ
パラメータ デフォルト 説明
$table 必須 テーブル名.
$db
null
データベース接続
返り値 影響する行の数
例外 サポートされていない時に \Database_Exception
\DBUtil::truncate_table('my_table');

analyze_table($table, $db = null)

analyze_table メソッドは、テーブルを分析します

静的 はい
パラメータ
パラメータ デフォルト 説明
$table 必須 テーブル名.
$db
null
データベース接続
返り値 テーブルが OK なら true 。注意が必要なら false 。サポートされていなければエラーメッセージをログに記録する
if(\DBUtil::analyze_table('table_name') === false)
{
	// 何か処理を行う
}

check_table($table, $db = null)

check_table メソッドは、テーブルをチェックします。

静的 はい
パラメータ
パラメータ デフォルト 説明
$table 必須 テーブル名.
$db
null
データベース接続
返り値 テーブルが OK なら true 。注意が必要なら false 。サポートされていなければエラーメッセージをログに記録する
if(\DBUtil::check_table('table_name') === false)
{
	// 何か処理を行う
}

optimize_table($table, $db = null)

optimize_table メソッドは、テーブルを最適化します

静的 はい
パラメータ
パラメータ デフォルト 説明
$table 必須 テーブル名.
$db
null
データベース接続
返り値 テーブルが OK なら true 。注意が必要なら false 。サポートされていなければエラーメッセージをログに記録する
if(\DBUtil::optimize_table('table_name') === false)
{
	// 何か処理を行う
}

repair_table($table, $db = null)

repair_table メソッドは、テーブルを修復します

静的 はい
パラメータ
パラメータ デフォルト 説明
$table 必須 テーブル名
$db
null
データベース接続
返り値 テーブルが OK なら true 。注意が必要なら false 。サポートされていなければエラーメッセージをログに記録する
if(\DBUtil::repair_table('table_name') === false)
{
	// 何か処理を行う
}