如何在php中删除表来修复sql错误?

tquggr8v  于 2021-06-17  发布在  Mysql
关注(0)|答案(3)|浏览(251)

我已经创建了一个网站,你可以上传和下载文件-一切工作完美。但现在,我想创建一个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服务器版本相对应的手册,以获得使用“if object\u id”附近的正确语法( db.Users )在第1行**处不是null drop table db.user。
这意味着它与sql数据库的连接没有问题。
我试过而不是 IF OBJECT_ID 使用 IF NOT EXISTS ,但效果不太好。有人能告诉我多行sql命令是这个问题还是其他问题吗?
注意:我使用5.5.37版本的mariadb(如果有帮助的话)

yb3bgrhw

yb3bgrhw1#

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 功能,记录如下:
http://php.net/manual/en/mysqli.multi-query.php

jei2mxaa

jei2mxaa2#

就目前而言,mysql中不存在object\u id,只存在于mssql中。搜索对象\u id mysql 8.0参考手册不会返回任何有意义的内容。即使存在,if块的语法看起来也不好:youwant 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;
ubby3x7f

ubby3x7f3#

从未使用过object\u id,但使用“drop table if exists users

相关问题