我已经创建了一个网站,你可以上传和下载文件-一切工作完美。但现在,我想创建一个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(如果有帮助的话)
3条答案
按热度按时间yb3bgrhw1#
IF
在mysql/mariadb中不是有效的sql语句。这个
IF OBJECT_ID(...)
问题中的语句似乎是transact-sql(microsoft sql server)构造。mysql中的等效功能可以通过
(我希望这在mariadb 5.5中可以工作,但我还没有验证。)
请注意,如果表不存在,则语句的执行将引发警告(警告消息,而不是错误消息。)
这个
mysqli_query
函数运行一条语句。要运行多个语句,我们可以使用mysqli_multi_query
功能,记录如下:http://php.net/manual/en/mysqli.multi-query.php
jei2mxaa2#
就目前而言,mysql中不存在object\u id,只存在于mssql中。搜索对象\u id mysql 8.0参考手册不会返回任何有意义的内容。即使存在,if块的语法看起来也不好:youwant
IF...THEN...END
.要修复此错误,可以替换以下内容:
使用:
ubby3x7f3#
从未使用过object\u id,但使用“drop table if exists users