2016-08-17 4 views
0

私は自分のウェブサイト用の「セットアップスクリプト」を作成しようとしています。私は、テーブルといくつかのコンテンツを同時に追加して、データベースを作成したいと思います。これまでのところ、これは私がそれをやった方法ですが、それは複数のクエリを使用して一種オフ散らかっようだ:単一のクエリを使用してPHP経由で複数のMySQLテーブルを作成するには?

<?php 


$servername = "localhost"; 
$username = "root"; 
$password = "password"; 

// Create connection 
$conn = new mysqli($servername, $username, $password); 
// Check connection 
if ($conn->connect_error) { 
    die("Connection failed: " . $conn->connect_error); 
} 

// Create database 
$sql = "CREATE DATABASE MYDB"; 
if ($conn->query($sql) === TRUE) { 

    echo "1. Database created successfully <br/>"; 
    $conn->select_db("MYDB"); 


    $sql_members = "CREATE TABLE MEMBERS (
    id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY, 
    USERNAME VARCHAR(30) NOT NULL, 
    EMAIL VARCHAR(40) NOT NULL, 
    DISCOUNT VARCHAR(5), 
    PASSW CHAR(128), 
    ROLE VARCHAR(9) 
    )"; 


    if ($conn->query($sql_members) === TRUE) { 
     echo "2. Table MEMBERS created successfully <br/>"; 
    } else { 
     echo "Error creating table: " . $conn->error; 
    } 

    $sql_content = "CREATE TABLE CONTENT (
    id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY, 
    TITLE VARCHAR(30) NOT NULL, 
    TEXT VARCHAR(30) NOT NULL 
    )"; 

    if ($conn->query($sql_content) === TRUE) { 
     echo "3. Table CONTENT created successfully <br/>"; 
    } else { 
     echo "Error creating table: " . $conn->error; 
    } 



} else { 
    echo "Error creating database: " . $conn->error; 
} 

$conn->close(); 


?> 

は、より良い方法はありますか? ありがとう!

== UPDATE ==

私は、データベースをエクスポートして、私のセットアップクエリとして結果.sqlファイルを使用しようとしましたが、何かが間違っている、私が取得:テーブルを作成する

エラー: SQL構文にエラーがあります。ライン12

CREATE TABLE IF NOT EXISTS `CONTACTS` (
    `ID` int(11) NOT NULL AUTO_INCREMENT, 
    `NAME` varchar(25) COLLATE utf8_romanian_ci NOT NULL, 
    `PHONE` varchar(16) COLLATE utf8_romanian_ci NOT NULL, 
    `EMAIL` varchar(35) COLLATE utf8_romanian_ci NOT NULL, 
    `ADDRESS` text COLLATE utf8_romanian_ci NOT NULL, 
    `CITY` varchar(16) COLLATE utf8_romanian_ci NOT NULL, 
    `COUNTRY` varchar(16) COLLATE utf8_romanian_ci NOT NULL, 
    PRIMARY KEY (`ID`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_romanian_ci AUTO_INCREMENT=2 ; 

INSERT INTO `CONTACTS` (`ID`, `NAME`, `PHONE`, `EMAIL`, `ADDRESS`, `CITY`, `COUNTRY`) VALUES 
(1, 'Peter Brown', '0742062307', '[email protected]', 'Avenue 13.', 'Santaclaus', 'Austria'); 
で ' CONTACTSIDNAMEPHONEEMAILADDRESSCITY、 `COUN。INSERT INTO' の近くに使用する権利 構文についてはMySQLサーバのバージョンに対応 マニュアルをご確認ください

== SOLUTUIONの==

私は複数のクエリを実行するための "multi_queryのを()" が必要。

+0

すべてのSQLクエリを1つのファイルに記述し、 '; 'を使用してそれらを区切ることができます –

+1

マニュアルを読む:http://php.net/manual/en/pdo.begintrans action.php OR検索overoverflowflow:http://stackoverflow.com/questions/6346674/pdo-support-for-multiple-queries-pdo-mysql-pdo-mysqlnd;) – Bobot

+0

@BenseidSeidは、サンプルをドロップすることができます - ちょうど私が何かを逃した場合に備えて。ありがとう! –

答えて

2

:P

$errors = []; 

$table1 = "CREATE TABLE MEMBERS (
    id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY, 
    USERNAME VARCHAR(30) NOT NULL, 
    EMAIL VARCHAR(40) NOT NULL, 
    DISCOUNT VARCHAR(5), 
    PASSW CHAR(128), 
    ROLE VARCHAR(9) 
    )"; 

$table2 = "CREATE TABLE CONTENT (
    id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY, 
    TITLE VARCHAR(30) NOT NULL, 
    TEXT VARCHAR(30) NOT NULL 
    )"; 


$tables = [$table1, $table2]; 


foreach($tables as $k => $sql){ 
    $query = @$conn->query($sql); 

    if(!$query) 
     $errors[] = "Table $k : Creation failed ($conn->error)"; 
    else 
     $errors[] = "Table $k : Creation done"; 
} 


foreach($errors as $msg) { 
    echo "$msg <br>"; 
} 
+0

提案に感謝します:) –

0

export the whole database including all tablesコマンドラインを使用するか、PhPMyAdminを使用します。次に、PHPでファイルの内容を照会してデータベースを作成します。

+1

MAN!これは良いアイデアです!私は最初からすべてのものを手書きしようとしていました。ありがとう!! –

+0

うれしい私は助けることができました! –

0
あなたがファイルを作成し、そこにすべてのSQLクエリを置くことができ

... PHPコードで、その後

CREATE TABLE MEMBERS (
    id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY, 
    USERNAME VARCHAR(30) NOT NULL, 
    EMAIL VARCHAR(40) NOT NULL, 
    DISCOUNT VARCHAR(5), 
    PASSW CHAR(128), 
    ROLE VARCHAR(9) 
); 

CREATE TABLE CONTENT (
    id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY, 
    TITLE VARCHAR(30) NOT NULL, 
    TEXT VARCHAR(30) NOT NULL 
); 

:あなたはあまりにもこれを試すことができます

$query = file_get_contents ('queries.sql'); 

if ($conn->query($query) === TRUE) { 
    echo "all tables created successfully <br/>"; 
} else { 
    echo "Error creating tables: " . $conn->error; 
} 
+0

エクスポートしてセットアップスクリプトに.sqlを使用しようとしましたが、テーブルにデータを挿入するときにエラーが発生しました。 –

+0

'=== TRUE'は本当に必要ですか? – tadman

関連する問題