2013-02-10 54 views
1

所以,我是新来的PDO,只是试图让我的头。我有以下代码:验证MySQL表创建 - PDO

$sql = $conn->prepare(' 

CREATE TABLE IF NOT EXISTS `users` ( 
`UserID` INT(25) NOT NULL AUTO_INCREMENT PRIMARY KEY , 
`Username` VARCHAR(65) NOT NULL , 
`Password` VARCHAR(32) NOT NULL , 
`EmailAddress` VARCHAR(255) NOT NULL, 
`Name` VARCHAR(50) NOT NULL) '); 

$sql->execute(); 

有没有办法知道表是否已成功创建,或者它已经存在,因此没有执行?

我知道你可以检查 - > execute()获取true或false值,但在这种情况下,不管表格是否已经存在,它都不会总是成立?

+0

你可以删除'IF NOT EXISTS'和捕获异常。 – 2013-02-10 23:10:32

回答

4

不,这正是IF NOT EXISTS的目的 - 只要表格已经存在就不做任何事情,不会触发错误。

该解决方案显然太明显,看不到:只是省略了IF NOT EXISTS。如果该表存在,该语句将触发您可以捕获的异常(取决于配置)。

+0

有些希望使它有点整洁,例如如果它已经存在,他们会得到一个简单的一行消息“表已经存在”,如果它没有,并且它被添加,他们会得到“表添加”。 因为目前,我这样做的方式,它说“表添加”,即使它已经存在,如果我删除“IF NOT EXISTS”部分,然后它抛出了一个可怕的错误负载,而不仅仅是一个很好的简单的一行错误。 任何方式来实现这一目标? – Tenatious 2013-02-11 09:49:51

0

算出来:

try { 

    $sql = $conn->prepare(' 
     CREATE TABLE `users` ( 
     `UserID` INT(25) NOT NULL AUTO_INCREMENT PRIMARY KEY , 
     `Username` VARCHAR(65) NOT NULL , 
     `Password` VARCHAR(32) NOT NULL , 
     `EmailAddress` VARCHAR(255) NOT NULL, 
     `Name` VARCHAR(50) NOT NULL, 
     `Rank` INT(1) NOT NULL DEFAULT 0) 
     '); 

     $sql->execute(); 

     echo "Table 'users' added to the database"; 

} catch(PDOException $ex) { 
    $errors = $sql->errorInfo(); 
    echo($errors[2]); 
}