CREATE TABLE, если NOT EXISTS терпит неудачу, таблица уже существует

У меня есть следующий код:

$db_host = 'localhost'; $db_port = '3306'; $db_username = 'root'; $db_password = 'root'; $db_primaryDatabase = 'dsl_ams'; // Connect to the database, using the predefined database variables in /assets/repository/mysql.php $dbConnection = new mysqli($db_host, $db_username, $db_password, $db_primaryDatabase); // If there are errors (if the no# of errors is > 1), print out the error and cancel loading the page via exit(); if (mysqli_connect_errno()) { printf("Could not connect to MySQL databse: %s\n", mysqli_connect_error()); exit(); } $queryCreateUsersTable = "CREATE TABLE IF NOT EXISTS `USERS` ( `ID` int(11) unsigned NOT NULL auto_increment, `EMAIL` varchar(255) NOT NULL default '', `PASSWORD` varchar(255) NOT NULL default '', `PERMISSION_LEVEL` tinyint(1) unsigned NOT NULL default '1', `APPLICATION_COMPLETED` boolean NOT NULL default '0', `APPLICATION_IN_PROGRESS` boolean NOT NULL default '0', PRIMARY KEY (`ID`) )"; if(!$dbConnection->query($queryCreateUsersTable)){ echo "Table creation failed: (" . $dbConnection->errno . ") " . $dbConnection->error; } 

Какие результаты …

Table creation failed: (1050) Table ' dsl_ams . ПОЛЬЗОВАТЕЛИ ' already exists

Я не понимаю: не IF NOT EXISTS предполагать отменить выполнение SQL-запроса, если эта таблица уже существует? Другими словами, если таблица существует, не следует ли ей выйти из этого оператора if, а не вообще ничего эха, а не пытаться выполнить запрос?

Просто пытаюсь найти лучший способ «создать таблицу, если она не существует», не выведя ничего для пользователя.

Попробуй это

 $query = "SELECT ID FROM USERS"; $result = mysqli_query($dbConnection, $query); if(empty($result)) { $query = "CREATE TABLE USERS ( ID int(11) AUTO_INCREMENT, EMAIL varchar(255) NOT NULL, PASSWORD varchar(255) NOT NULL, PERMISSION_LEVEL int, APPLICATION_COMPLETED int, APPLICATION_IN_PROGRESS int, PRIMARY KEY (ID) )"; $result = mysqli_query($dbConnection, $query); } 

Это проверяет, есть ли что-либо в таблице, и если он возвращает NULL вас нет таблицы.

Также нет типа BOOLEAN в mysql, вы должны INT и просто установите его на 1 или 0 при вставке в таблицу. Вам также не нужны одинарные кавычки во всем, только когда вы вставляете данные в запрос.

Как это…

 $query = "INSERT INTO USERS (EMAIL, PASSWORD, PERMISSION_LEVEL, APPLICATION_COMPLETED, APPLICATION_IN_PROGRESS) VALUES ('foobar@foobar.com', 'fjsdfbsjkbgs', 0, 0, 0)"; 

Надеюсь это поможет.

Чтобы избежать вывода чего-либо, проверьте таблицу в своем php, прежде чем пытаться создать таблицу. Например,

 $querycheck='SELECT 1 FROM `USERS`'; $query_result=$dbConnection->query($querycheck); if ($query_result !== FALSE) { // table exists } else { // table does not exist, create here. } 

С наилучшими пожеланиями,

Как насчет того, чтобы вы отображали только ошибку, если номер ошибки не равен 1050?

 if(!$dbConnection->query($queryCreateUsersTable)){ if($dbConnection->errno != 1050){ echo "Table creation failed: (" . $dbConnection->errno . ") " . $dbConnection->error; } }