Mysql &引用;“创建表格”;语句不工作,其他代码工作正常

Mysql &引用;“创建表格”;语句不工作,其他代码工作正常,mysql,Mysql,我正在尝试插入一个新的主题和相应的文件夹以及一个表 subject但仅create table语句不工作,而其他语句正在工作 很好。如果我将“CREATETABLE”语句直接复制到mysql中,那么 正在工作,但在此代码中面临问题 if(isset($_GET['Subject'])) { $subj = $_GET['subject']; $re = "insert into branches(branch) values('$subj')";

我正在尝试插入一个新的主题和相应的文件夹以及一个表 subject但仅create table语句不工作,而其他语句正在工作 很好。如果我将“CREATETABLE”语句直接复制到mysql中,那么 正在工作,但在此代码中面临问题

   if(isset($_GET['Subject'])) {
        $subj = $_GET['subject'];
        $re = "insert into branches(branch) values('$subj')";
        if(!mysql_query($re)) {
            echo "<h3>Dublicate Subject! or Error in inserting data</h3>";
        }
        else {
                mkdir("../$subj");
            $re = "create table $subj (id int(8) primary key auto_increment, sub_dir varchar(40) unique)";
            if(!mysql_query($re)) {
            echo "<h3>Cannot create Table named '$subj' but subject is inserted! First Delete it!</h3>";
                }
        }
    }
if(isset($\u GET['Subject'])){
$subj=$_GET['subject'];
$re=“插入分支(分支)值(“$subc”)”;
如果(!mysql_query($re)){
回显“重复主题!或插入数据时出错”;
}
否则{
mkdir(“../$sub”);
$re=“创建表$subc(id int(8)主键自动递增,sub_dir varchar(40)unique)”;
如果(!mysql_query($re)){
echo“无法创建名为“$subj”的表,但已插入subject!请先删除它!”;
}
}
}

错误消息:您的SQL语法有错误;检查与您的MySQL服务器版本对应的手册,以了解在第1行的“
add(id int(8)主键自动递增,sub_dir varchar(40)unique)”附近使用的正确语法

ADD
是MySQL保留字。要将其用作数据库对象,请在其周围加上背景标记

但是,在计算中避免对数据库对象名或表达式名使用保留字是一个更好的选择

根据规则和命名约定,适当更改要创建的表的名称


请参阅

最佳解决方案是使用echo语句输出您试图运行的查询。然后你可以自己测试并发现问题。另一点是,查询失败,因为没有在表名周围添加反勾号


您的代码非常不安全,将导致sql注入。您需要使用mysql\u real\u escape\u string()来转义表名。

您得到的确切错误消息是什么?没有错误消息,但手动消息:无法创建名为“any\u subject”的表。。。这在代码中。然后使用
mysql\u error()
error message获取真正的错误消息:您的SQL语法有错误;检查与您的MySQL服务器版本对应的手册,以了解在第1行的“add(id int(8)主键自动递增,sub_dir varchar(40)unique)”附近使用的正确语法