如何通过在PHP中删除表来修复SQL错误?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (28)

我创建了一个可以上传和下载文件的网站 - 一切都很完美。但现在,我想创建一个init文件,删除数据库中的旧记录并在其中创建一个新表。

所以我写这个:

$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服务器版本对应的手册,以便db.Users在第1行“IF OBJECT_ID()IS NOT NULL DROP TABLE db.User” 附近使用正确的语法**。

这意味着它与SQL数据库的连接没有问题。

我试过使用IF NOT EXISTS而不是IF OBJECT_ID,但它也不起作用。任何人都可以告诉我多行SQL命令是否是这个问题或者是否是其他问题?

注意:我使用5.5.37版本的MariaDB

提问于
用户回答回答于

IF 在MySQL / MariaDB中不是有效的SQL语句。

问题中的IF OBJECT_ID(...)语句似乎是Transact-SQL(Microsoft SQL Server)构造。

MySQL中的等效功能可以实现

DROP TABLE IF EXISTS foo.mytable ;

(我希望这可以在MariaDB 5.5中使用,但我还没有验证过。)

请注意,如果表不存在,则语句的执行将引发警告。(警告消息,而不是错误消息。)

mysqli_query函数运行单个语句。要运行多个语句,我们可以使用mysqli_multi_query函数

用户回答回答于

从来没有使用OBJECT_ID,但你想要的东西似乎用“drop table if exists users;”很容易实现

扫码关注云+社区

领取腾讯云代金券