このページは、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テーブルがなければ・・・
以下つづく・・・・・・