-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 は同じエラー メッセージを返しました。以前の提案に基づいて、これをあらゆる方法で変更するために最善を尽くしましたが、行き詰まっています。2 番目の例とほぼ同じ形式のテーブルは、私の 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 に答える