创建简单表时出现 mySQL 语法错误


mySQL syntax error when creating simple table

我最近从Linux切换到Windows工作,我过去在mysql中通过php创建表的方式似乎不再有效了。

我首先尝试使用一些 php 变量创建表:

$tablename=$_POST['tablename'];
$fields=array('First Name', 'Last Name', 'Institution', 'Abbr.', 'City', 'Country', 'Phone', 'Email', 'Found by', 'Salesperson', 'Temp', 'Notes');
$sql ="CREATE TABLE $tablename
  (
  PID INT NOT NULL AUTO_INCREMENT,";
foreach ($fields as $field){$sql .= " $field CHAR(50),";}
$sql .= "PRIMARY KEY(PID))";
if (mysqli_query($con,$sql))
  {echo "Table persons created successfully";}
else
  {echo "Error creating table: " . mysqli_error($con);}

返回错误:"您的 SQL 语法有错误;检查与您的MySQL服务器版本相对应的手册,了解在第2行的"(PID INT NOT NULL AUTO_INCREMENT,FirstName NOT NULL CHAR(50),LastNam"附近使用的正确语法

我认为空格可能有问题,因此我尝试手动输入表数据:

$sql="CREATE TABLE $tablename
  (
  PID INT NOT NULL AUTO_INCREMENT,
  FirstName NOT NULL CHAR(50),
  LastName NOT NULL CHAR(50),
  Institution NOT NULL CHAR(50),
  Abbr NOT NULL CHAR(50),
  City NOT NULL CHAR(50),
  Country NOT NULL CHAR(50), 
  Phone NOT NULL CHAR(50), 
  Email NOT NULL CHAR(50), 
  Foundby NOT NULL CHAR(50),
  Salesperson NOT NULL CHAR(50),
  Temp NOT NULL CHAR(50),
  Notes NOT NULL CHAR(50),
  PRIMARY KEY(PID))";

返回相同错误消息的 Bu。我已经尽力根据以前的建议以各种方式修改它,但我被困住了。与第二个示例格式几乎完全相同的表格在我的 Linux 盒子上完美运行......

NOT NULL应该遵循列类型

例如,它应该是:

FirstName CHAR(50) NOT NULL

但你把它说成:

FirstName NOT NULL CHAR(50)

这对我有用:

CREATE TABLE test_table
(
    PID INT NOT NULL AUTO_INCREMENT,
    FirstName  CHAR(50) NOT NULL,
    LastName CHAR(50) NOT NULL,
    Institution CHAR(50) NOT NULL,
    Abbr CHAR(50) NOT NULL,
    City CHAR(50) NOT NULL,
    Country CHAR(50) NOT NULL, 
    Phone CHAR(50) NOT NULL, 
    Email CHAR(50) NOT NULL, 
    Foundby CHAR(50) NOT NULL,
    Salesperson CHAR(50) NOT NULL,
    Temp CHAR(50) NOT NULL,
    Notes CHAR(50) NOT NULL,
    PRIMARY KEY(PID)
)

您的代码看起来可以很好地生成 CREATE TABLE 的 SQL,但由于您的列名有空格,您需要使用反引号:

$tablename = 'persons';
$fields = array('First Name', 'Last Name', 'Institution', 'Abbr.', 'City', 'Country', 'Phone', 'Email', 'Found by', 'Salesperson', 'Temp', 'Notes');
$sql = "CREATE TABLE `".$tablename."`
(
    `PID` INT NOT NULL AUTO_INCREMENT,";
foreach( $fields as $field )
{
    $sql .= "
    `" .$field ."` CHAR(50) NOT NULL,";
}
$sql .= "
    PRIMARY KEY(PID)
)";
echo $sql;

将给出:

CREATE TABLE `persons`
(
    `PID` INT NOT NULL AUTO_INCREMENT,
    `First Name` CHAR(50) NOT NULL,
    `Last Name` CHAR(50) NOT NULL,
    `Institution` CHAR(50) NOT NULL,
    `Abbr.` CHAR(50) NOT NULL,
    `City` CHAR(50) NOT NULL,
    `Country` CHAR(50) NOT NULL,
    `Phone` CHAR(50) NOT NULL,
    `Email` CHAR(50) NOT NULL,
    `Found by` CHAR(50) NOT NULL,
    `Salesperson` CHAR(50) NOT NULL,
    `Temp` CHAR(50) NOT NULL,
    `Notes` CHAR(50) NOT NULL,
    PRIMARY KEY(PID)
)

上面的SQL创建的表没有任何问题。

FirstName NOT NULL CHAR(50)之后的所有行都以错误的顺序编写。

它应该是 {column_name} {数据类型} {选项},但你有 {数据类型} 和 {选项} 相反。

所以把所有东西都修好 FirstName CHAR(50) NOT NULL它应该有效。

(您的PID格式正确)