このページは、PHPを使用し
MYSQLで「テーブルを作成」する際のテクニックを
自分のためにWEB上にメモしています
データベース上にテーブルが存在するか調べるPHPプログラム
データベースにテーブルが存在するか?存在しなければ作成するPHPプログラム
まずPHPを使ってMySQLにつなぐ
(ついでにテーブルが存在するのか?調べる関数も作成)
以下のプログラムは、「MySQL用」です
PHPでMYSQLに接続
require_once realpath(dirname(__FILE__)).'/../db/mysql/dbinfo.php';//DBへのパス
$s=mysql_connect($serv,$user,$pass) or die("接続エラー");//接続値を$sに代入
//mysql_query("set names utf8");//←UTF-8を使用したい場合は、コレは使ってはいけないらしい
mysql_set_charset("utf8");//文字コードの指定はこちらを使う
mysql_select_db($db_name);
$tb_name = 'test';//存在を確認するテーブル
//ここから存在を確認するオリジナル関数
function table_exists($db_name,$tb_name,$s){
$rs =mysql_list_tables($db_name,$s);
while($arr_row = mysql_fetch_row($rs)){
if(in_array($tb_name,$arr_row)){
return true;
}
}
return false;
}
テーブルが存在すれば作成しない。存在しなければ作成するプログラム
テーブルがあるのか?判定する部分(なければテーブル作成する)
テーブルの存在を確認しなければテーブルを作成するプログラム
if(!table_exists($db_name,$tb_name,$s)){ //テーブルが存在するのか? 判定している
$sql =<<< END
CREATE TABLE `test` (
`id` INT( 10 ) NOT NULL AUTO_INCREMENT ,
`name` VARCHAR( 80 ) NOT NULL ,
`price` INT( 6 ) NOT NULL ,
`zaiko` INT( 5 ) NOT NULL DEFAULT '5',
`ureyuki` INT( 20 ) NOT NULL DEFAULT '0',
`comment` TEXT NOT NULL ,
`kousinbi` DATETIME NOT NULL ,
PRIMARY KEY ( `id` ) ,
UNIQUE (
`name`
)
) ENGINE = MYISAM CHARACTER SET utf8 COLLATE utf8_general_ci;
END;
mysql_query($sql,$s);//テーブルがなければ新たに作成
echo "新規に『テスト』テーブルを作成しました<br />";
}else{
echo "『テスト』テーブルはすでに存在しています<br />";
}
pdoでテーブルの存在を確認する方法
MySQLでテーブルの存在を確認する関数 PDO版
下のプログラムは 「MySQL専用です」他のデータベースでは使えません
MySQLのSHOWクエリでテーブルが存在するか判定しています
pdoで接続
try {
$pdo = new PDO("mysql:dbname=$db_name;host=$serv","$user","$pass",
array(
PDO::MYSQL_ATTR_INIT_COMMAND => "SET CHARACTER SET `utf8`"
)
);
} catch (PDOException $e) {
die($e->getMessage());
}
//テーブルの存在を確認するプログラム(PDO対応に改造)
$tb_name1 = 'test'; //testテーブルがあるか確認したい場合
$tb_name2 = 'test2'; //test2テーブル
//ここからテーブル存在チェック関数を作成(MySQL用)
function table_check($tb_name,$pdo){
$rs =$pdo->query("SHOW TABLES"); // SHOWはMySQLでしか使えません
$table = $rs->fetchAll(PDO::FETCH_COLUMN);
if(in_array($tb_name,$table)){
return true;
}
return false;
}
//ここからがテーブルの存在確認
if(!table_check($tb_name1,$pdo)){ // testテーブルがなければ・・・
$sql =<<< EOT
CREATE TABLE `test` (
`id` INT( 10 ) NOT NULL AUTO_INCREMENT ,
`name` VARCHAR( 80 ) NOT NULL ,
`kousinbi` DATETIME NOT NULL ,
PRIMARY KEY ( `id` ) ,
UNIQUE (
`name`
)
) ENGINE = InnoDB CHARACTER SET utf8 COLLATE utf8_general_ci;
EOT;
$st=$pdo->query($sql);//テーブルがなければ新たに作成
$message .= "新規に『test』テーブルを作成しました<br />";
}else{
$message .= "『test』テーブルはすでに存在しているため、作成しませんでした<br />";
}
if(!table_check($tb_name2,$pdo)){ // test2テーブルがなければ・・・
以下つづく・・・・・・