2017-09-26 20 views
1

PHPスクリプトを作成しました。これにより、接続されているデータベースで事前定義されたテーブルがチェックされ、そこにテーブルがない場合、スクリプトによってそれらのテーブルが作成されます。スイッチケースの実行が成功したことを確認してください

私はswitch ... caseを使用して、このエラーが発生していないテーブルを作成しました。

私がしたいことは、switch ... caseがエラーなしで終了したかどうかを確認することです。エラーがなければ、毎日実行されるいくつかのタスクを作成する別のセットまたはsqlステートメントを起動します。上記のコードが出て、私はタスクを作成しますSQL文の下に実行したいすべてのエラーを実行した後

これが今の私のテーブルのチェックおよび作成PHP一部、

<?php 
//This is the array that contains all the table names 
    $tableNames = array(
     'catdb', 'clientdb', 'qcerrors', 'searchterm', 'teams', 'tempdb', 'userlogin', 'userroles', 'usertimetrack' 
    ); 

    //I'm using this for loop to loop through the array and create the tables 
    //if they doesn't exists. 
    for ($i = 0; $i < count($tableNames); $i++) { 
     $tableCheck = $dbConnect->query("SHOW TABLES LIKE '" . $tableNames[$i] . "'"); 
     if ($tableCheck->rowCount() > 0) { 
      echo $tableNames[$i] . " .... Exists <br />"; 
     } else { 
      $tblName = $tableNames[$i]; 

      switch ($tblName) { 
       case "catdb": 
        try { 
         $tblCreate = "CREATE TABLE IF NOT EXISTS `catdb` (
             `catId` int(100) NOT NULL AUTO_INCREMENT, 
             `uId` int(100) NOT NULL, 
             `Catagory` varchar(100) NOT NULL, 
             `createDate` varchar(100) NOT NULL, 
             PRIMARY KEY (`catId`) 
             ) ENGINE=MyISAM DEFAULT CHARSET=latin1"; 
         $dbConnect->exec($tblCreate); 
         echo $tblName . " .... Created OK <br />"; 
        } catch (PDOException $e) { 
         echo $tblCreate . "<br>" . $e->getMessage(); 
        } 
        break; 

       case "clientdb": 
        try { 
         $tblCreate = "CREATE TABLE IF NOT EXISTS `clientdb` (
             `clientId` int(100) NOT NULL AUTO_INCREMENT, 
             `catId` varchar(100) NOT NULL, 
             `uId` int(100) NOT NULL, 
             `Client` varchar(100) NOT NULL, 
             `cDate` varchar(100) NOT NULL, 
             PRIMARY KEY (`clientId`) 
             ) ENGINE=MyISAM DEFAULT CHARSET=latin1"; 
         $dbConnect->exec($tblCreate); 
         echo $tblName . " .... Created OK <br />"; 
        } catch (PDOException $e) { 
         echo $tblCreate . "<br>" . $e->getMessage(); 
        } 
        break; 

       case "qcerrors": 
        try { 
         $tblCreate = "CREATE TABLE IF NOT EXISTS `qcerrors` (
            `qcId` int(100) NOT NULL AUTO_INCREMENT, 
            `qcError` varchar(100) NOT NULL, 
            `createdBy` varchar(100) DEFAULT NULL, 
            `createdOn` varchar(100) DEFAULT NULL, 
            PRIMARY KEY (`qcId`) 
            ) ENGINE=MyISAM DEFAULT CHARSET=latin1"; 
         $dbConnect->exec($tblCreate); 
         echo $tblName . " .... Created OK <br />"; 
        } catch (PDOException $e) { 
         echo $tblCreate . "<br>" . $e->getMessage(); 
        } 
        break; 

       case "searchterm": 
        try { 
         $tblCreate = "CREATE TABLE IF NOT EXISTS `searchterm` (
            `sId` int(100) NOT NULL AUTO_INCREMENT, 
            `sDate` varchar(100) NOT NULL, 
            `sUid` int(100) NOT NULL, 
            `searchedBy` int(100) NOT NULL, 
            PRIMARY KEY (`sId`) 
            ) ENGINE=MyISAM DEFAULT CHARSET=latin1"; 
         $dbConnect->exec($tblCreate); 
         echo $tblName . " .... Created OK <br />"; 
        } catch (PDOException $e) { 
         echo $tblCreate . "<br>" . $e->getMessage(); 
        } 
        break; 

       case "teams": 
        try { 
         $tblCreate = "CREATE TABLE IF NOT EXISTS `teams` (
             `tId` int(100) NOT NULL AUTO_INCREMENT, 
             `TeamName` varchar(100) NOT NULL, 
             `tlName` varchar(100) DEFAULT NULL, 
             `tlSet` varchar(100) NOT NULL, 
             PRIMARY KEY (`tId`) 
             ) ENGINE=MyISAM DEFAULT CHARSET=latin1"; 
         $dbConnect->exec($tblCreate); 
         echo $tblName . " .... Created OK <br />"; 
        } catch (PDOException $e) { 
         echo $tblCreate . "<br>" . $e->getMessage(); 
        } 
        break; 

       case "tempdb": 
        try { 
         $tblCreate = "CREATE TABLE IF NOT EXISTS `tempdb` (
             `tempId` int(100) NOT NULL AUTO_INCREMENT, 
             `uId` int(100) NOT NULL, 
             `tId` int(100) NOT NULL, 
             `catId` int(100) NOT NULL, 
             `clientId` int(100) NOT NULL, 
             `startTime` varchar(100) NOT NULL, 
             `Status` varchar(100) NOT NULL, 
             PRIMARY KEY (`tempId`) 
             ) ENGINE=MyISAM DEFAULT CHARSET=latin1"; 
         $dbConnect->exec($tblCreate); 
         echo $tblName . " .... Created OK <br />"; 
        } catch (PDOException $e) { 
         echo $tblCreate . "<br>" . $e->getMessage(); 
        } 
        break; 

       case "userlogin": 
        try { 
         $tblCreate = "CREATE TABLE IF NOT EXISTS `userlogin` (
             `uId` int(100) NOT NULL AUTO_INCREMENT, 
             `uCreateDate` varchar(100) NOT NULL, 
             `createdBy` int(100) NOT NULL, 
             `fName` varchar(100) NOT NULL, 
             `lName` varchar(100) NOT NULL, 
             `uName` varchar(100) NOT NULL, 
             `pWord` varchar(100) NOT NULL, 
             `uTeam` int(100) NOT NULL, 
             `uRole` varchar(100) NOT NULL, 
             PRIMARY KEY (`uId`) 
             ) ENGINE=MyISAM DEFAULT CHARSET=latin1"; 
         $dbConnect->exec($tblCreate); 
         echo $tblName . " .... Created OK <br />"; 
        } catch (PDOException $e) { 
         echo $tblCreate . "<br>" . $e->getMessage(); 
        } 
        break; 

       case "userroles": 
        try { 
         $tblCreate = "CREATE TABLE IF NOT EXISTS `userroles` (
             `urId` int(100) NOT NULL AUTO_INCREMENT, 
             `userRole` varchar(100) NOT NULL, 
             PRIMARY KEY (`urId`) 
             ) ENGINE=MyISAM DEFAULT CHARSET=latin1"; 
         $dbConnect->exec($tblCreate); 
         echo $tblName . " .... Created OK <br />"; 
        } catch (PDOException $e) { 
         echo $tblCreate . "<br>" . $e->getMessage(); 
        } 
        break; 

       case "usertimetrack": 
        try { 
         $tblCreate = "CREATE TABLE IF NOT EXISTS `usertimetrack` (
             `utId` int(100) NOT NULL AUTO_INCREMENT, 
             `jDate` varchar(100) NOT NULL, 
             `usrId` int(100) NOT NULL, 
             `Category` varchar(100) NOT NULL, 
             `utClient` varchar(100) NOT NULL, 
             `jType` varchar(100) NOT NULL, 
             `startTime` varchar(100) NOT NULL, 
             `endTime` varchar(100) NOT NULL, 
             `timeSpent` varchar(100) NOT NULL, 
             `Volume` int(100) NOT NULL, 
             `qcErrorId` varchar(100) NOT NULL, 
             `noOfProductLines` int(100) DEFAULT NULL, 
             `Remarks` varchar(1000) DEFAULT NULL, 
             PRIMARY KEY (`utId`) 
             ) ENGINE=MyISAM DEFAULT CHARSET=latin1"; 
         $dbConnect->exec($tblCreate); 
         echo $tblName . " .... Created OK <br />"; 
        } catch (PDOException $e) { 
         echo $tblCreate . "<br>" . $e->getMessage(); 
        } 
        break; 

       default: 
        echo $tblName . " this table is not part of this system.<br />"; 
      } 
     } 
    } 
    ?> 

です。

<?php 
$timeNow = date("Y-m-d H:i:s"); //To get the current time 
//Set the event scheduler status from OFF to ON 
$dbConnect->exec("SET GLOBAL event_scheduler = ON"); 

//Creates the daily task 1 to truncate searchterm table 
$createTask1 = "CREATE DEFINER= '" . $dbUser . "'@`%` EVENT `searcTerm Table Clean` ON SCHEDULE EVERY 1 DAY STARTS '" . $timeNow . "' ON COMPLETION NOT PRESERVE ENABLE DO TRUNCATE TABLE searchterm"; 
$dbConnect->exec($createTask1); 

//Creates the daily task 1 to truncate tempdb table 
$createTask2 = "CREATE DEFINER= '" . $dbUser . "'@`%` EVENT `EmptyData` ON SCHEDULE EVERY 1 DAY STARTS '" . $timeNow . "' ON COMPLETION NOT PRESERVE ENABLE DO TRUNCATE TABLE tempdb"; 
$dbConnect->exec($createTask2); 
?> 

私はgoogleとsoを検索しましたが、私は質問をすることにしました。 switch ... caseが何らかの誤りで終わったかどうかを確認するために何をすればよいかを明らかにした場合、私は自分の問題をコミュニティに明確にしたことを願っています。あなたのコードで

+0

MyISAM?本当に? – GordonM

+0

あなたはもっと良いものを教えてくれますか?MySQLのデフォルトエンジンを使ってください。 – Sand

+0

InnoDBはMySQLのデフォルトであり、何年も続いています。比較的最近のバージョンのMySQLを使用しています。また、ラテン語1は将来あなたに出くわすかもしれませんが、なぜUFT8MB4を使用しないのですか? – GordonM

答えて

2

は、私はcatchブロック内のエコーの多くを参照してください。あなたのcatchブロックで、次に

$errors = array(); 

:switch文の前に

} catch (PDOException $e) { 
    echo $tblCreate . "<br>" . $e->getMessage(); 
} 

を、あなたはエラー配列を作ることができます必要に応じてエコーを残しても、エラー・メッセージをエラー・アレイに追加することができます。

} catch (PDOException $e) { 
    echo $tblCreate . "<br>" . $e->getMessage(); 
    $errors[] = $tblCreate.' - '.$e->getMessage(); 
} 

最後に、コードが実行された後、エラー配列を数えることでエラーを確認できます。

if (count($errors) == 0) { 
    // code ran successfully 
} else { 
    // fail 
} 
+0

これを試してみて、お時間をいただきありがとうございます。 – Sand

+0

チャームm8のように働いてくれてありがとうございました。 – Sand

+0

問題なし、うれしい – delboy1978uk

関連する問題