0

私のコードは次のとおりです。

$sql = "
    CREATE TABLE articles (
        articleUID int NOT NULL AUTO_INCREMENT, 
        PRIMARY KEY(articleUID), 
        by tinytext, 
        article longtext, 
        game enum('Starcraft','Starcraft 2','Team Fortress 2','Minecraft','Tekkit','other')
    )
";
if(mysql_query($sql, $con)) {
    echo "The table \"articles\" was created succesfully.<br />";
} else{
    echo "Error creating  table: " . mysql_error() . "<br />";
}

それは PHP にあり、ファイルには他にも問題がありますが、これは私に問題を引き起こしている部分です。

これを実行しようとすると、次のようになります。

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'by tinytext, article longtext, game enum(Starcraft,Starcraft 2,Team Fortress 2,' at line 1    

これを解決するために残りのコードが必要かどうかはわかりませんが、必要な場合は編集して投稿します。ここで何が問題なのか誰か教えてもらえますか? 列挙型引数の ' の代わりに \" を使用してみましたが、うまくいきません。

4

3 に答える 3

3

BYMySQL の予約語であり、列またはテーブルの識別子として使用する場合はバッククォートで囲む必要があります。

列定義内で主キーを宣言できます。

$sql = "CREATE TABLE articles (
  articleUID int NOT NULL AUTO_INCREMENT PRIMARY KEY,
  /* Quote the reserved word BY */
  `by` tinytext, 
  article longtext, 
  game enum('Starcraft','Starcraft 2','Team Fortress 2','Minecraft','Tekkit','other')
)";

PRIMARY KEYまたは、列定義の後に括弧を付けて宣言することもできます

$sql = "CREATE TABLE articles (
  articleUID int NOT NULL AUTO_INCREMENT,
  `by` tinytext, 
  article longtext, 
  game enum('Starcraft','Starcraft 2','Team Fortress 2','Minecraft','Tekkit','other'),
  PRIMARY KEY (articleUID)
)";
于 2012-09-23T23:04:29.777 に答える
2

bymysql のキーワードです。キーワードとして使用したくない場合は、引用してください。また、自動インクリメントと主キーを定義するときにエラーが発生します。

$sql = "CREATE TABLE articles (
    `articleUID` int NOT NULL AUTO_INCREMENT PRIMARY KEY,
    `by` tinytext, 
    `article longtext,
    `game` enum('Starcraft','Starcraft 2','Team Fortress 2','Minecraft','Tekkit','other')
)";
于 2012-09-23T23:08:37.077 に答える
0

列定義の間に主キー定義を入れました。最初にすべての列を宣言し、最後に主キーを宣言します。

于 2012-09-23T23:05:50.093 に答える