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)
{
// 何か処理を行う
}
|