Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/248.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何通过在PHP中删除表来修复SQL错误?_Php_Mysql_Sql_Mariadb - Fatal编程技术网

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

如何通过在PHP中删除表来修复SQL错误?,php,mysql,sql,mariadb,Php,Mysql,Sql,Mariadb,我已经创建了一个网站,你可以上传和下载文件-一切工作完美。但现在,我想创建一个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

我已经创建了一个网站,你可以上传和下载文件-一切工作完美。但现在,我想创建一个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服务器版本相对应的手册,以了解在第1行**处的“IF OBJECT_ID(
db.Users
)不是NULL DROP TABLE db.User”附近使用的正确语法

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

我尝试了在对象ID不存在时使用
,而不是
,但它也不起作用。谁能告诉我多行SQL命令是这个问题还是其他问题


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

从未使用过对象ID,但您想要的似乎很容易实现
“如果存在用户,则删除表;”

就用户而言,对象ID在mysql中不存在,仅在mssql中存在。不重复任何有意义的内容。即使它存在,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;

如果
不是MySQL/MariaDB中的有效SQL语句

问题中的
IF OBJECT\u ID(…)
语句似乎是Transact-SQL(Microsoft SQL Server)构造

MySQL中的等效功能可以通过

DROP TABLE IF EXISTS foo.mytable ;
(我预计这将在MariaDB 5.5中起作用,但我尚未验证。)

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


mysqli\u查询
函数运行一条语句。要运行多条语句,我们可以使用mysqli\u multi\u query
函数,如下所示:


在很多地方,你用单引号
代替了勾号
。是的,但我用勾号也试过了,但结果是一样的;你必须更新你的问题,包括所有这些的真正语法。它也可以基于此关闭;它们必须分开分隔……也许,我从未见过Mysql/MariaDB中使用的对象ID,只有MSSQL。此外,除非MariaDB与MySQL有很大的不同,否则不能将脚本作为查询执行。您需要一次执行一个,如果存在,请使用
删除表
,因为您不能使用
如果
。对不起-现在它是对的。哦,对不起,我误解了。你写道:“我试过用IF NOT EXISTS代替IF OBJECT_ID use IF NOT EXISTS”我以为你试过在create table query中写‘IF NOT EXIST’,而不是在drop table query中写‘IF NOT EXISTS’,我试过了,但不管用。(现在,我又试了一次,但还是不起作用)@GBM After change“您的SQL语法有错误;请检查与您的MariaDB服务器版本相对应的手册,以了解在“DROP TABLE IF EXISTS db.Uploads;CREATE TABLE
Users
”(第2行的
Id
)附近使用的正确语法(几乎相同)mysqli_multi_query-就是这样!谢谢!出于安全原因,避免使用
mysqli_multi_query
。可以从PHP发出多个命令(这不是问题),也可以编写一个存储过程将其封装在一起,然后
调用
SP。