mysql — невозможно создать представление из PHP, но можно из phpMyAdmin

Я работаю над сценарием установки PHP, который создаст необходимую базу данных, таблицы и представления в MySQL. Когда я запускаю скрипт в Internet Explorer, он возвращает пустой экран (как и ожидалось, если не было ошибок).

Когда я смотрю на свою базу данных в phpMyAdmin, я вижу все таблицы, но представление не существует. Когда я бегу так же CREATE VIEW Оператор SQL через окно SQL phpMyAdmin, представление создается, как и ожидалось.

У меня большой опыт работы с 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; проверьте руководство, которое соответствует вашей версии сервера MySQL, чтобы найти правильный синтаксис для использования рядом с ‘)’ в строке 16

Строка 16 соответствует $database = "FLASHCARD";, Что это значит?

1

Решение

Строка 16 идет не от того, что вы думаете, а от самого запроса.

Вы пропустили скобку в последнем запросе и должны были использовать mysqli_error($mysqli) по запросу там тоже.

Так что измени свой код там, чтобы

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

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]