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

时间:2013-10-17 23:41:16

标签: php mysql linux

我最近从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服务器版本对应的手册,以便在'附近使用正确的语法'(PID INT NOT NULL AUTO_INCREMENT,FirstName NOT NULL CHAR(50) ,LastNam'在第2行“

我认为空间可能有些问题,所以我尝试手动输入表数据:

$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机器上完美运行...

2 个答案:

答案 0 :(得分:2)

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创建表没有任何问题。

答案 1 :(得分:1)

FirstName NOT NULL CHAR(50)之后的所有行都写错了。

它应该是{column_name} {datatype} {options},但你有{datatype}和{options}。

所以要解决所有问题 FirstName CHAR(50) NOT NULL 它应该工作。

(您的PID格式正确)