无法从php创建视图,但可以从phpmyadmin创建

vojdkbi0  于 2021-06-18  发布在  Mysql
关注(0)|答案(1)|浏览(275)

我正在编写一个php安装脚本,它将在mysql中创建所需的数据库、表和视图。当我在internetexplorer中运行脚本时,它返回一个空白屏幕(如果没有错误,则与预期一样)。
当我在phpmyadmin中查看数据库时,我看到了所有的表,但是视图并不存在。当我运行相同的 CREATE VIEW sql语句通过phpmyadmin的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 . 现在我把它加进去了,它给了我以下的错误信息:
sql语法有错误;在第16行的“)”附近,检查与mysql服务器版本对应的手册,以获得正确的语法
第16行对应于 $database = "FLASHCARD"; . 那是什么意思?

3pmvbmvn

3pmvbmvn1#

第16行不是来自您所想的,而是查询本身。
上一次查询中缺少括号,应该使用 mysqli_error($mysqli) 关于查询也有。
所以把你的密码改成

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

相关问题