首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在PHP中通过删除一个表来修复SQL错误?

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

Stack Overflow用户
提问于 2019-01-03 02:11:50
回答 3查看 397关注 0票数 0

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

所以我写了这个:

代码语言:javascript
复制
$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服务器版本对应的手册,以了解在第1**行'IF OBJECT_ID(db.Users) IS NOT NULL DROP TABLE db.User‘附近要使用的正确语法。

这意味着它在连接到SQL数据库时没有问题。

我试着用IF NOT EXISTS代替IF OBJECT_ID,但它也不起作用。谁能告诉我多行SQL命令是这个问题还是别的什么问题?

注意:我使用的是5.5.37版本的MariaDB (如果有帮助的话)

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-01-03 03:48:10

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

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

在MySQL中实现的等效功能可以使用

代码语言:javascript
复制
DROP TABLE IF EXISTS foo.mytable ;

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

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

mysqli_query函数运行一条语句。要运行多条语句,我们可以使用mysqli_multi_query函数,如下所示:

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

票数 2
EN

Stack Overflow用户

发布于 2019-01-03 03:14:27

就目前而言,OBJECT_ID并不存在于mysql中,只存在于mssql中。Searching for OBJECT_ID mysql 8.0 reference manual不返回任何有意义的内容。即使它存在,if块的语法看起来也不太好:您想要IF...THEN...END

要修复此错误,您可以替换以下代码:

代码语言:javascript
复制
IF OBJECT_ID(`".$database.".Users`) IS NOT NULL 
DROP TABLE ".$database.".Users; 
IF OBJECT_ID(`".$database.".Uploads`) IS NOT NULL 
DROP TABLE ".$database.".Uploads; 

通过以下方式:

代码语言:javascript
复制
DROP TABLE IF EXISTS ".$database.".Users;
DROP TABLE IF EXISTS ".$database.".Uploads;
票数 1
EN

Stack Overflow用户

发布于 2019-01-03 02:22:43

从未使用过OBJECT_ID,但使用"drop table users;“似乎很容易实现您想要的功能。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54011176

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档