我使用以下要点来尝试创建数据库连接:
https://gist.github.com/jonashansen229/4534794
到目前为止似乎有效。
但是创建数据库表pass_exams失败了。
编辑:
在最近的评论和建议后,我更新了我的代码:
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控制台时,只创建了表学生。 为什么表pass_exams缺失?
答案 0 :(得分:5)
您创建字符串以检查$query_students = 'SELECT ID FROM STUDENTS';
但你从来没有真正运行过这个。然后你检查字符串是否为空,它在代码中永远不会为空。
你应该做的是使用mysql的CREATE ... IF NOT EXISTS语法,而不是你在这里做的。
第一个示例显示语法https://dev.mysql.com/doc/refman/5.5/en/create-table.html
答案 1 :(得分:1)
id
表格中的students
列为INT(6) UNSIGNED
,但student_id
表格中的passed_exams
列为已签名 INT(6)
。因此FOREIGN KEY (student_id) REFERENCES students(id) ON DELETE CASCADE
子句将失败,并且#34;错误代码:1215。无法添加外键约束"。
我建议您实现一些错误处理,以便您看到此错误消息,而不是盲目地继续执行代码。