Edited at

データベースにテーブルがなければ自動で作成する

More than 5 years have passed since last update.

ちょいちょい使うのでメモ。

例えば、あるページに遷移した際に、または、あるボタンを押した際に

そのユーザーのテーブルがDBに存在していなければ作成する。


テーブルの有無をチェック


function

function table_check($dbname,$tablename,$my_Con){

$rs = mysql_list_tables($dbname,$my_Con);
while($arr_row = mysql_fetch_row($rs)) {
if(in_array($tablename,$arr_row)) {
return true;
}
}
return false;
}

●まず、上記のfunctionを作って冒頭PHPの一番下にでも置いておきます。

●条件として $my_Con にはデータベースへの接続情報を入れておきます。


接続情報

$my_Con = mysql_connect("ホスト名","ユーザー名","パスワード");


こういうの。


テーブルを作成

以下の記述で処理。

条件に合わせて記述場所を変える。


処理

$dbname = "データベース名";

$tablename ="テーブル名";
//-------↓↓↓さっきのfanction-----------------------------------
if (!table_check($dbname,$tablename,$my_Con)) {
//---------------↓↓↓ここでテーブル作成-----------------------
$sql1 = "CREATE TABLE `{$tablename}`"
."("
. "`dd` INT auto_increment primary key," /////////// ※1
. "`y` INT," //////////////※2
. "`m` INT,"
. "`d` INT,"
. "`youbi` INT,"
. "`yokin` INT,"
. "`c1` VARCHAR(20),"
. "`c2` VARCHAR(20),"
. "`c3` VARCHAR(20),"
. "`c4` VARCHAR(20),"
. "`c5` VARCHAR(20),"
. "`i_date` DATETIME"
.");";
$rs=mysql_query($sql1)or die(mysql_error());
}

●※1…auto_increment primary keyも指定できる。

●※2…INT は長さ指定なしだと11になります。

●最後の項目以外は「,」を忘れず入れる。

●複数のDBを読み込んでいる場合でもそれぞれのDBに作れる。


まとめ

複数のテーブルにそれぞれテーブルがなければ作成します。

テーブルの内容は適当。


まとめ

<?php

//--------------------------------------
//データベース1に作成
//--------------------------------------
$dbname = "データベース1";
$tablename ="keisan_{$udd}";
if (!table_check($dbname,$tablename,$my_Con)) {
$sql1 = "CREATE TABLE `{$tablename}`"
."("
. "`dd` INT auto_increment primary key,"
. "`y` INT,"
. "`m` INT,"
. "`d` INT,"
. "`youbi` INT,"
. "`yokin` INT,"
. "`a1` INT,"
. "`a2` INT,"
. "`a3` INT,"
. "`a4` INT,"
. "`a5` INT,"
. "`i_date` DATETIME"
.");";
$rs=mysql_query($sql1)or die(mysql_error());
}
//--------------------------------------
//データベース2に作成
//--------------------------------------
$dbname = "データベース2";
$tablename ="category_{$udd}";
if (!table_check($dbname,$tablename,$my_Con)) {
$sql2 = "CREATE TABLE `{$tablename}`"
."("
. "`dd` INT auto_increment primary key,"
. "`yokin` INT,"
. "`c1` VARCHAR(20),"
. "`c2` VARCHAR(20),"
. "`c3` VARCHAR(20),"
. "`c4` VARCHAR(20),"
. "`c5` VARCHAR(20)"
.");";
$rs=mysql_query($sql2)or die(mysql_error());
}
//--------------------------------------
//テーブルの有無チェック
//--------------------------------------
function table_check($dbname,$tablename,$my_Con){
$rs = mysql_list_tables($dbname,$my_Con);
while($arr_row = mysql_fetch_row($rs)) {
if(in_array($tablename,$arr_row)) {
return true;
}
}
return false;
}
?>


もうちょっと考えたら色々使い道あるかも…。