查看与MySQL服务器版本对应的手册,以获得正确的语法

时间:2013-07-23 08:47:32

标签: mysql syntax-error

有人可以告诉我下面这一堆非常简单的SQL代码有什么问题吗? 我正在尝试使用PHP和mysql。

     // Create table
     $tname=$_POST["appname"];

     $creatt="CREATE TABLE $tname
      (
       AppVersion VARCHAR(30),
       AppType VARCHAR(30),
       FileName VARCHAR(255),
       AppSize FLOAT,
       sizetype VARCHAR(30),
       apppart FLOAT,
       appLRadress VARCHAR(255),
       appSRadress VARCHAR(255),
       appRadress VARCHAR(255),
       apptahye DATE(),
       appupload DATE(),
       appfenally DATE(),
       status CHAR(30),
       applearn CHAR(30),
       applearnadd VARCHAR(255),
       applearnudate DATE(),
       learntype VARCHAR(30),
       appcrack CHAR(30),
       appcrackadd VARCHAR(255),
       appcrackdate DATE(),
       cracktype CHAR(30)
      )";


   // Execute query
     if (mysqli_query($con,$creatt))
       {
      echo "Table $tname created successfully";
        }
      else
        {
         echo "Error creating table: " . mysqli_error($con);
        }

发生此错误:

  

创建表时出错:SQL语法中有错误;检查与您的MySQL服务器版本对应的手册,以便在第1行的'photoshop(AppVersion VARCHAR(30),AppType VARCHAR(30),FileName VARCHAR'附近使用正确的语法

但是当我使用较少的列时这样:

  $tname=$_POST["appname"]; 
  $creatt="CREATE TABLE `$tname`(FirstName CHAR(30),LastName CHAR(30),Age INT)"; 

它有效!!!!

我的专栏有什么问题?

3 个答案:

答案 0 :(得分:0)

检查sql Fiddle Link

http://sqlfiddle.com/#!2/0060c

 $tname=addslashes($_POST["appname"]);

 $creatt="CREATE TABLE `$tname`
      (
       AppVersion VARCHAR(30),
       AppType VARCHAR(30),
       FileName VARCHAR(255),
       AppSize FLOAT,
       sizetype VARCHAR(30),
       apppart FLOAT,
       appLRadress VARCHAR(255),
       appSRadress VARCHAR(255),
       appRadress VARCHAR(255),
       apptahye DATE,
       appupload DATE,
       appfenally DATE,
       status CHAR(30),
       applearn CHAR(30),
       applearnadd VARCHAR(255),
       applearnudate DATE,
       learntype VARCHAR(30),
       appcrack CHAR(30),
       appcrackadd VARCHAR(255),
       appcrackdate DATE,
       cracktype CHAR(30)
      );

答案 1 :(得分:0)

显然,不是$tname而是在SQL字符串中获得"'photoshop"。所以你应该check and sanitize用户输入。

CREATE TABLE 'photoshop
      (
       AppVersion VARCHAR(30),
        ....
       cracktype CHAR(30)
      );

答案 2 :(得分:0)

抱歉浪费你的时间!问题是一些括号,要创建一个日期列,不应该在DATE前面()!我刚刚删除了那些问题解决了!!很抱歉打扰你,这是我的坏事。