2016-05-15 11 views
-1

を失敗した私は、データベース接続を作成するにはOOPの試みを作るために、以下の要旨を使用します。PHPのデータベーステーブルの作成が

https://gist.github.com/jonashansen229/4534794

これまで動作しているようです。

しかし、データベーステーブルpassed_examsの作成は失敗します。

編集:

最近のコメントや提案の後、私は私のコードを更新:私は、mysqlのコンソールで見ると

require_once 'Database.php'; // the gist 4534794 

class DatabaseSchema { 

    public function createStudents() { 
    $db = Database::getInstance(); 
    $mysqli = $db->getConnection(); 
    $create_students = 'CREATE TABLE IF NOT EXISTS students (
     id INT(6) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, 
     firstname VARCHAR(40) NOT NULL, 
     lastname VARCHAR(40) NOT NULL, 
     university VARCHAR(50) 
    )'; 
    $result = $mysqli->query($create_students); 
    } 

    public function createPassedExams() { 
    $db = Database::getInstance(); 
    $mysqli = $db->getConnection(); 
    $create_passed_exams = 'CREATE TABLE IF NOT EXISTS passed_exams (
     id INT(6) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, 
     name VARCHAR(40) NOT NULL, 
     student_id INT(6), 
     FOREIGN KEY (student_id) REFERENCES students(id) ON DELETE CASCADE 
    )'; 
    $result = $mysqli->query($create_passed_exams); 
    } 

} 

$db_student = new DatabaseSchema(); 

$db_student->createStudents(); 
$db_student->createPassedExams(); 

、唯一のテーブルの学生が作成されます。 table passed_examsが見つからないのはなぜですか?

+0

$ db_student = new DatabaseSchema()最後に ';'がありません。 –

+0

ああ男の子、ありがとう@Arsh、完全に見落とされる。 – StandardNerd

+0

あなたは大歓迎です。 –

答えて

1

あなたstudentsテーブルの上にid列がINT(6) UNSIGNEDですがpassed_examsテーブルの上にstudent_id列がINT(6)を締結しています。したがって、FOREIGN KEY (student_id) REFERENCES students(id) ON DELETE CASCADE句は、 "エラーコード:1215.外部キー制約を追加できません"で失敗します。

コードを盲目的に実行するのではなく、このエラーメッセージが表示されるように、エラー処理を実装することをお勧めします。

+0

ありがとうMatt!私はエラー処理を追加します。 – StandardNerd

5

の文字列を作成して$query_students = 'SELECT ID FROM STUDENTS'; をチェックしますが、実際にはこれを実行することはありません。その後、空であれば文字列をチェックし、コード内で空ではありません。 あなたがすべきことは、mysqlのCREATE ... IF NOT EXISTS構文を使用することです。

最初の例は、構文を表示https://dev.mysql.com/doc/refman/5.5/en/create-table.html

+0

完全にあなたに同意します。文字列にはテキストがあり、空ではないので、空であるかどうかをチェックしています。空であれば照会を実行します。 –

+0

'CREATE ... IF NOT EXISTS'も参考にしてください。 – Martin

+0

素晴らしい、ありがとう! – StandardNerd

関連する問題