2012-01-07 150 views
1

我需要一次創建多個表。我很難搞清楚完成這個的正確方法。目前,我的劇本是這樣的:SQL一次創建多個表

private function buildDB() { 
    $sql = <<<MySQL_QUERY 
CREATE TABLE IF NOT EXISTS headings (
type  VARCHAR(150), 
heading  VARCHAR(100), 
uniqueid VARCHAR(100) 
) 

CREATE TABLE IF NOT EXISTS titles (
type  VARCHAR(150), 
heading  VARCHAR(100), 
uniqueid VARCHAR(100) 
) 
MySQL_QUERY; 

    return mysql_query($sql); 
    } 

顯然,這並不工作,並沒有創建表。是否有一種簡單的方法可以一次創建多個表格?

回答

4

MySQL越來越困惑,因爲你沒有劃定你的查詢。添加一個分號第一CREATE語句後:

private function buildDB() { 
    $sql = <<<MySQL_QUERY 
     CREATE TABLE IF NOT EXISTS headings (
     type  VARCHAR(150), 
     heading  VARCHAR(100), 
     uniqueid VARCHAR(100) 
     ); 

     CREATE TABLE IF NOT EXISTS titles (
     type  VARCHAR(150), 
     heading  VARCHAR(100), 
     uniqueid VARCHAR(100) 
     ) 
MySQL_QUERY; 

    return mysql_query($sql); 
} 

此外,還要確保MySQL_QUERY是在該行的開頭任何其它字符,可能除了一個分號,按照該Heredoc documentation


看到,因爲上面沒有出現工作,給這個代碼試試:

private function buildDB() { 
    $sql1 = "CREATE TABLE IF NOT EXISTS headings (
     type  VARCHAR(150), 
     heading  VARCHAR(100), 
     uniqueid VARCHAR(100))"; 

    $sql2 = "CREATE TABLE IF NOT EXISTS titles (
     type  VARCHAR(150), 
     heading  VARCHAR(100), 
     uniqueid VARCHAR(100))"; 
MySQL_QUERY; 

    return mysql_query($sql1) && mysql_query($sql2); 
} 

可以使用mysqli_multi_query()(MySQL的版本不存在),但你」那麼必須使用MySQLi。上面的代碼返回兩個查詢的邏輯AND,所以如果一個失敗,你仍然會得到一個0

+0

這似乎沒有工作...我需要換出MYSQL_QUERY MYSQL_MULTI_QUERY嗎? – Thomas 2012-01-07 03:14:17

+0

@Thomas請參閱我的編輯。 – Bojangles 2012-01-07 03:53:17

1

這是因爲mysql_query()一次只能執行一個查詢。請嘗試使用mysqli :: multi_query()來代替(http://php.net/manual/en/mysqli.multi-query.php),但要用分號結束查詢。然而

最簡單的方法是直接運行在你的MySQL客戶端

+0

我應該在哪裏更換它們?就在它說'return mysql_query($ sql)'的底部? – Thomas 2012-01-07 03:19:30

1

,只要他們得到適當的分隔可以發出多個查詢的CREATE TABLE語句。當進行多次查詢,更改此:

CREATE TABLE IF NOT EXISTS headings (
type  VARCHAR(150), 
heading  VARCHAR(100), 
uniqueid VARCHAR(100) 
) 

CREATE TABLE IF NOT EXISTS titles (
type  VARCHAR(150), 
heading  VARCHAR(100), 
uniqueid VARCHAR(100) 
) 

CREATE TABLE IF NOT EXISTS headings (
type  VARCHAR(150), 
heading  VARCHAR(100), 
uniqueid VARCHAR(100) 
); // added a friendly semicolon 

CREATE TABLE IF NOT EXISTS titles (
type  VARCHAR(150), 
heading  VARCHAR(100), 
uniqueid VARCHAR(100) 
); // added a friendly semicolon 

,你應該設置。

如果沒有,請在該處進行一些調試,以確切瞭解您的SQL或周圍代碼的不滿情況。

+0

歡迎來到SO,並感謝您幫助其他編碼人員。有你的第一個upvote :-) – Bojangles 2012-01-07 02:49:26