-1

我最近从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 机器上完美运行......

4

2 回答 2

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

于 2013-10-17T23:55:47.487 回答
1

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

它应该是 {column_name} {datatype} {options},但你有 {datatype} 和 {options} 以相反的方式。

所以修复一切 FirstName CHAR(50) NOT NULL ,它应该工作。

(您PID的格式正确)

于 2013-10-18T00:07:01.970 回答