php数据库表创建失败


php database table creation fails

我使用以下要点进行OOP尝试来创建数据库连接:

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

到目前为止,它似乎有效。

但是数据库表passed_exels的创建失败。

编辑:

在最近的评论和建议之后,我更新了我的代码:

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

当我在mysql控制台中查看时,只创建了表学生。为什么缺少passed_exels表?

您创建字符串来检查$query_students = 'SELECT ID FROM STUDENTS';但你从来没有真正运行过这个。然后你检查字符串,如果它是空的,它在你的代码中永远不会是空的。您应该使用CREATE。。。IF NOT EXISTS mysql的语法,而不是您在这里所做的。

第一个示例显示语法https://dev.mysql.com/doc/refman/5.5/en/create-table.html

您的students表上的id列是INT(6) UNSIGNED,但passed_exams表中的student_id列是带符号的INT(6)。因此,FOREIGN KEY (student_id) REFERENCES students(id) ON DELETE CASCADE子句将失败,并显示"错误代码:1215。无法添加外键约束".

我建议你实现一些错误处理,这样你就会看到这个错误消息,而不是盲目地继续执行代码。