2012-01-07 12 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_QUERYHeredoc 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); 
} 

あなた「(MySQLのバージョンが存在しない)mysqli_multi_query()を使用しますが、あなたの可能性その後、MySQLiを使用する必要があります。上記のコードは2つのクエリの論理ANDを返します。したがって、失敗した場合でも0が返されます。

+0

これは動作していないようです... MYSQL_MULTI_QUERYのMYSQL_QUERYを交換する必要がありますか? – Thomas

+0

@トーマス私の編集をご覧ください。 – Bojangles

1

これは、mysql_query()が一度に1つのクエリしか実行できないためです。代わりにmysqli :: multi_query()(http://php.net/manual/en/mysqli.multi-query.php)を試してくださいが、セミコロンでクエリを終了してください。

最も簡単な方法は、しかし、直接あなたがいる限り、彼らが適切に区切られているように、複数のクエリを発行することができ、あなたのMySQLクライアントに

+0

どこで変更する必要がありますか?一番下に 'return mysql_query($ sql)'と書いてありますか? – Thomas

1

をCREATE TABLE文を実行することです。複数のクエリを発行する場合、この変更:

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 

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) 
) 

を、あなたが設定する必要があります。

もしそうでなければ、そこにいくつかのデバッグを投げて、あなたのSQLまたは周囲のコードがどこに不満を持っているかを正確に見てください。

+0

ようこそ、ようこそ、仲間のコーダーを助けてくれてありがとう。あなたの最初のupvoteを持っています:-) – Bojangles

関連する問題