Как исправить ошибку SQL при удалении таблицы в PHP?

Вопрос задан: 11 месяцев назад Последняя активность: 11 месяцев назад
up 0 down

Я создал веб, вы можете загружать и скачивать файлы - все работает отлично. Но теперь я хочу создать файл инициализации, который удаляет старые записи в базе данных и создает новые таблицы в нем.

Итак, я пишу это:

$command = "
IF OBJECT_ID(`".$database.".Users`) IS NOT NULL 
    DROP TABLE ".$database.".Users; 
IF OBJECT_ID(`".$database.".Uploads`) IS NOT NULL 
    DROP TABLE ".$database.".Uploads; 

CREATE TABLE `Users` (
  `Id` int(11) NOT NULL,
  `User` text NOT NULL,
  `Password` text NOT NULL,
  `Permission` int(11) NOT NULL
) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8;

ALTER TABLE `Users` ADD PRIMARY KEY (`Id`);
ALTER TABLE `Users` MODIFY `Id` int(11) NOT NULL AUTO_INCREMENT,AUTO_INCREMENT=0;

CREATE TABLE `Uploads` (
  `Id` int(11) NOT NULL,
  `Name` text NOT NULL,
  `User` text NOT NULL,
  `Comment` text NOT NULL,
  `Path` text NOT NULL,
  `Permission` int(11) NOT NULL,
  `Date` text NOT NULL
) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8;

ALTER TABLE `Uploads` ADD PRIMARY KEY (`Id`);
ALTER TABLE `Uploads` MODIFY `Id` int(11) NOT NULL AUTO_INCREMENT,AUTO_INCREMENT=0;
";
$result = mysqli_query($conn, $command) or die(mysqli_error($conn));

Я думаю, что код правильный (но, очевидно, нет). Когда я запускаю его, SQL выдает ошибку:

У вас есть ошибка в вашем синтаксисе SQL; проверьте руководство, соответствующее вашей версии сервера MariaDB, на предмет правильного синтаксиса для использования рядом с 'IF OBJECT_ID (db.Users) НЕ НУЛЯЕТ ТАБЛИЦУ УСТРОЙСТВА db.User 'в строке 1 **.

Это означает, что у него нет проблем с подключением к базе данных SQL.

Я попробовал вместо IF OBJECT_ID использование IF NOT EXISTS, но это тоже не работает. Кто-нибудь может сказать мне, если многострочная команда SQL это проблема или это что-то еще?

Примечание: я использую 5.5.37 версию MariaDB (если это поможет)

3 ответа

Возможно, для Вашего проекта будут необходимы бесплатные векторные карты. На нашем сайте представлены карты для всех стран.

Реклама

up 1 down accepted

IF не является допустимым оператором SQL в MySQL/MariaDB.

IF OBJECT_ID(...) утверждение в вопросе представляется конструкцией Transact-SQL (Microsoft SQL Server).

Эквивалентная функциональность в MySQL будет достигнута с

DROP TABLE IF EXISTS foo.mytable ;

(Я ожидаю, что это будет работать в MariaDB 5.5, но я не проверял.)

Обратите внимание, что если таблица не существует, выполнение оператора вызовет предупреждение. (Предупреждающее сообщение, а не сообщение об ошибке.)


mysqli_query функция запускает один оператор. Чтобы запустить несколько операторов, мы можем использовать mysqli_multi_query функция, документированная здесь:

http://php.net/manual/en/mysqli.multi-query.php

up 0 down

Что касается, OBJECT_ID не существует в mysql, только в mssql. Поиск OBJECT_ID mysql 8.0 справочное руководство не возвращает ничего осмысленного. Даже если он существует, ваш синтаксис для блока IF выглядит не очень хорошо: вы хотите IF...THEN...END.

Чтобы исправить ошибку, вы можете заменить это:

IF OBJECT_ID(`".$database.".Users`) IS NOT NULL 
DROP TABLE ".$database.".Users; 
IF OBJECT_ID(`".$database.".Uploads`) IS NOT NULL 
DROP TABLE ".$database.".Uploads; 

С :

DROP TABLE IF EXISTS ".$database.".Users;
DROP TABLE IF EXISTS ".$database.".Uploads;
up 0 down

никогда не использовал OBJECT_ID, но то, что вы хотите, кажется легко выполнимым "удалить таблицу, если есть пользователи;"