【问题标题】:Check the switch case execution successful检查switch case执行成功
【发布时间】:2017-09-26 08:03:30
【问题描述】:

我创建了一个PHP 脚本,它将检查连接的数据库中是否有一些预定义的表,如果这些表不存在,脚本将创建这些表。

在这个脚本中,我使用了switch ... case 创建了可以正常工作且没有任何错误的表。

现在我要做的是检查switch ... case 是否以没有任何错误结束。如果没有错误,那么我想触发另一组或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 />";
            }
        }
    }
    ?>

现在,在上面的代码运行没有任何错误之后,我想在 SQL 语句下面运行,这将创建任务。

<?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 是否没有任何错误结束。

【问题讨论】:

  • MyISAM?真的吗?
  • 你能告诉我一个更好的吗,请使用MySQL中的默认引擎。
  • InnoDB 是 MySQL 的默认设置,并且多年来一直如此。您使用的是相对较新的 MySQL 版本,对吧?此外,拉丁语 1 将来可能会困扰您,为什么不使用 UFT8MB4?
  • 是的,我正在使用 WAMP 附带的 v5.714。真的没有太在意。那么我应该将引擎切换到InnoDB并将字符集更改为UTF8MB4吗?
  • 您绝对应该将引擎更改为 InnoDB。您是否应该使用 UTF8MB4 更多取决于您的用例,但通常它可以编码几乎所有内容(包括表情符号)而拉丁语 1 不能

标签: php switch-statement


【解决方案1】:

在您的代码中,我在 catch 块中看到了很多回声:

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

在switch语句之前,你可以创建一个errors数组:

$errors = array();

然后,在您的 catch 块中,您可以根据需要保留回显,但将错误消息添加到错误数组中:

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

最后,当代码运行完毕后,你可以通过计算错误数组来检查错误:

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

【讨论】:

  • 会试试这个,让你,谢谢你的时间。
猜你喜欢
  • 1970-01-01
  • 2015-07-27
  • 2015-07-16
  • 2014-03-27
  • 2014-11-09
  • 1970-01-01
  • 1970-01-01
  • 2017-08-14
  • 1970-01-01
相关资源
最近更新 更多