"创建表"声明不起作用,其他代码完全正常工作

时间:2014-03-15 03:53:13

标签: mysql

我正在尝试插入一个新主题和相应的文件夹以及一个表格  subject但只有create table语句在其他语句工作时不起作用  很好。如果我正在复制"创建表"语句直接进入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>";
                }
        }
    }

2 个答案:

答案 0 :(得分:1)

  

错误消息:您的SQL语法中有错误;检查与MySQL服务器版本对应的手册,以便在第1行的“add (id int(8) primary key auto_increment, sub_dir varchar(40) unique)”附近使用正确的语法

ADD是MySQL保留字。要将它用作数据库对象,请用后面的刻度包围它。

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

根据需要更改要创建的表的名称,并遵守规则和命名约定。

请参阅MySQL Reserved Words

答案 1 :(得分:0)

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

您的代码非常不安全,会导致sql注入。您需要使用mysql_real_escape_string()来转义表名。