DBUtil Class

DBUtil クラスは、データベースへの機械的な操作を管理し、実行できます。

Managing functions

DBUtil は、データベースフィールドを作成、リネーム、変更、そして削除できます。

set_connection($connection)

set_connection メソッドは、すべてのメソッドのデフォルトの DBUtil 接続を設定します。

静的 はい
パラメータ
Param デフォルト 説明
$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 を投げます。

静的 はい
パラメータ
Param デフォルト 説明
$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)
{
	// 作成に失敗しました ...
}

// デフォルトの文字セットを設定することもできます。
// CREATE DATABASE IF NOT EXISTS `new_database` DEFAULT CHARACTER SET 'utf8'
DBUtil::create_database('new_database', 'utf8');

// CREATE DATABASE IF NOT EXISTS `new_database  DEFAULT CHARACTER SET 'utf8' COLLATE 'utf8_unicode_ci'
DBUtil::create_database('new_database', 'utf8_unicode_ci');

文字セットが指定されなかった場合、アクティブな db グループの文字セットにフォールバックします。

drop_database($database, $db = null)

drop_database メソッドは、データベースを削除します。削除できなかった場合、例外 Database_Exception を投げます。

静的 はい
パラメータ
Param デフォルト 説明
$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 メソッドは、引数で指定したテーブルが存在するか確かめます。

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

drop_table($table, $db = null)

drop_table メソッドは、テーブルを削除します。削除できなかった場合、例外 Database_Exception を投げます。

静的 はい
パラメータ
Param デフォルト 説明
$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 メソッドは、テーブルをリネームします。

静的 はい
パラメータ
Param デフォルト 説明
$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 メソッドは、テーブルを作成します。

静的 はい
パラメータ
Param デフォルト 説明
$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'
				),
			),
		),
	),
);

/* produces the following SQL statement:
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;
*/
可能なパラメータ
Param 説明
name フィールド名
type フィールド型 (varchar, enum, text, ...)
constraint 長さあるいは値。値は配列も可。
charset フィールドの文字セット
unsigned 真偽値、符号無しなら true、デフォルトは false
default デフォルト値
null 真偽値、null を許可する場合は true、デフォルトは false
auto_increment オートインクリメントを使用する場合は true
comment フィールドにコメントを追加する

フィールドのデフォルト値はデフォルトでエスケープされます。この値をエスケープしたくない場合もあるでしょう。 その場合、DB::escape を使用できます。

\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 メソッドは、引数で指定したテーブルに引数で指定したフィールドが存在するか確かめます。

静的 はい
パラメータ
Param デフォルト 説明
$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 メソッドは、テーブルにフィールドを追加します。

静的 はい
パラメータ
Param デフォルト 説明
$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 メソッドは、テーブルからフィールドを削除します。

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

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

modify_fields メソッドは、テーブルのフィールドを変更します。

静的 はい
パラメータ
Param デフォルト 説明
$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 メソッドは、テーブルに二次インデックスを作成します。

静的 はい
パラメータ
Param デフォルト 説明
$table 必須 テーブル名
$index_columns 必須 mixed (フィールド名を含む文字列または配列)
$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 メソッドは、テーブルから二次インデックスを削除します。

静的 はい
パラメータ
Param デフォルト 説明
$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 メソッドは、テーブル作成後に、外部キーを追加します。

静的 はい
パラメータ
Param デフォルト 説明
$table 必須 テーブル名
$foreign_key 必須 外部キー定義を含む配列
返り値 データベース操作の結果
例外 \InvalidArgumentException on invalid input, 失敗時に \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 メソッドは、テーブルから外部キーを削除します。

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

Database operations

truncate_table($table, $db = null)

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

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

analyze_table($table, $db = null)

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

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

check_table($table, $db = null)

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

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

optimize_table($table, $db = null)

The optimize_table method optimizes a table.

静的 はい
パラメータ
Param デフォルト 説明
$table 必須 テーブル名.
$db
null
データベース接続
返り値 True if the table is OK or optimized. False on failure. If not supported or failed it logs the error message.
if(\DBUtil::optimize_table('table_name') === false)
{
	// 何か処理を行う
}

repair_table($table, $db = null)

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

静的 はい
パラメータ
Param デフォルト 説明
$table 必須 テーブル名.
$db
null
データベース接続
返り値 テーブルが OK または修復された場合 True。失敗した場合 false。サポートされていない場合、失敗した場合はエラーメッセージをログに記録する。
if(\DBUtil::repair_table('table_name') === false)
{
	// 何か処理を行う
}