2013-02-10 60 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]); 
}