无法从 PHP 创建视图但可以从 phpMyAdmin

Unable to Create View from PHP but can from phpMyAdmin

我正在编写 PHP 安装脚本,它将在 MySQL 中创建所需的数据库、表和视图。当我 运行 Internet Explorer 中的脚本时,它 returns 一个空白屏幕(如果没有错误,这是预期的)。

当我在 phpMyAdmin 中查看我的数据库时,我看到了所有表,但视图不存在。当我 运行 通过 phpMyAdmin 的 SQL window 相同的 CREATE VIEW SQL 语句时,视图按预期创建。

我对 SQL 有丰富的经验,但我对 PHP 和 phpMyAdmin 是全新的。为什么视图不从 PHP 脚本创建,而表创建?

PHP 脚本:

<html>
<head>
    <title>Install Flashcard Script</title>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css" integrity="sha384-MCw98/SFnGE8fJT3GXwEOngsV7Zt27NXFoaoApmYm81iuXoPkFOJwJ8ERdknLPMO" crossorigin="anonymous">
    <link href='https://fonts.googleapis.com/css?family=Lato:300,400,700' rel='stylesheet' type='text/css'>
    <link href='custom.css' rel='stylesheet' type='text/css'>
</head>
<body>

    <?php
        $host = "localhost";
        $user = "root";
        $password = "";
        $database = "FLASHCARD";

        $mysqli = new mysqli($host, $user, $password) or die(mysqli_error($mysqli));
        $mysqli->query("DROP DATABASE IF EXISTS " . $database) or die($mysqli->error);
        $mysqli->query("CREATE DATABASE " . $database) or die($mysqli->error);

        $mysqli = new mysqli($host, $user, $password, $database) or die(mysqli_error($mysqli));

        $mysqli->query("CREATE TABLE COURSES (
                            COURSE_ID INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY, 
                            COURSE_NAME VARCHAR(255) NOT NULL,
                            COURSE_DESC TEXT NOT NULL,
                            DATE_CREATED DATETIME NOT NULL,
                            CREATED_BY BIGINT(20)
                            )") or die($mysqli->error);

        $mysqli->query("CREATE TABLE COURSE_SUBJECTS (
                            SUBJ_ID INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
                            COURSE_ID INT(6),
                            SUBJ_NAME VARCHAR(255) NOT NULL,
                            SUBJ_DESC TEXT,
                            DATE_CREATED DATETIME NOT NULL,
                            CREATED_BY BIGINT(20)
                            )") or die($mysqli->error);

        $mysqli->query("CREATE TABLE SUBJECT_DECKS (
                            DECK_ID INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
                            SUBJ_ID INT(6) NOT NULL,
                            DECK_NAME VARCHAR(255) NOT NULL,
                            DECK_DESC TEXT,
                            DATE_CREATED DATETIME NOT NULL,
                            CREATED_BY BIGINT(20)
                            )") or die($mysqli->error); 

        $mysqli->query("CREATE VIEW DECK_VIEW AS
                            SELECT 
                                c.COURSE_ID,
                                cs.SUBJ_ID,
                                sd.DECK_ID,
                                c.COURSE_NAME,
                                c.COURSE_DESC,
                                cs.SUBJ_NAME,
                                cs.SUBJ_DESC,
                                sd.DECK_NAME,
                                sd.DECK_DESC
                            FROM COURSES c
                            LEFT JOIN COURSE_SUBJECTS cs ON cs.COURSE_ID = c.COURSE_ID
                            LEFT JOIN SUBJECT_DECKS sd on sd.SUBJ_ID = cs.SUBJ_ID
                            ORDER BY COURSE_NAME, SUBJ_NAME, DECK_NAME
                            )") or die($mysqli->error);

    ?>
    </body>
</html>

**编辑

我在 CREATE VIEW 上遗漏了一条错误捕获语句。现在我在那里添加了它,它给了我以下错误消息:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ')' at line 16

第 16 行对应 $database = "FLASHCARD";。这是什么意思?

第 16 行不是来自您的想法,而是查询本身。

您在上一个查询中遗漏了一个括号,应该在该查询中也使用 mysqli_error($mysqli)

所以把你的代码改成

CREATE VIEW DECK_VIEW AS ( SELECT...
                         ^ // right there