3

PHP PDO クエリを使用して mySQL クエリを実行します。クエリは foreach() から入力された多数の情報で構成されています。だから私はSQLクエリをエコーアウトしました。問題はここにありますが、私には見えません。

これはの出力です$sql

CREATE TABLE IF NOT EXISTS `page` (
  `page_ID` INT AUTO_INCREMENT NOT NULL,
  `url` varchar(200) NOT NULL,
  `title` varchar(200),
  `subtitle` TEXT,
  `content` TEXT,
  `parent` varchar(10),
  `privacy` varchar(1),
  `status` varchar(1),
  `creation` varchar(30)
) CHARACTER SET utf8 COLLATE utf8_general_ci;

参考までに、クエリは次のように実行されます。

function createdbtable($table,$fields){
    global $fsdbh;
    $sql = "CREATE TABLE IF NOT EXISTS `$table` (";
    foreach($fields as $field => $type){ $sql.= "`$field` $type,"; }
    $sql = rtrim($sql,',');
    $sql .= ") CHARACTER SET utf8 COLLATE utf8_general_ci"; return $sql;
    if($fsdbh->exec($sql) !== false) { return 1; }
}

これはエラーです:

#1075 - テーブル定義が正しくありません。自動列は 1 つしか存在できず、キーとして定義する必要があります

4

1 に答える 1

10

主キーを忘れました:

CREATE TABLE IF NOT EXISTS `page` (
`page_ID` INT AUTO_INCREMENT NOT NULL,
`url` varchar(200) NOT NULL,
`title` varchar(200),
`subtitle` TEXT,
`content` TEXT,
`parent` varchar(10),
`privacy` varchar(1),
`status` varchar(1),
`creation` varchar(30),
PRIMARY KEY (`page_ID`)) 
CHARACTER SET utf8 COLLATE utf8_general_ci

エラーは非常に明白でした:

スキーマの作成に失敗しました: テーブル定義が正しくありません。自動列は 1 つしか存在できず、キーとして定義する必要があります

キーとして自動インクリメント キーを指定する必要があります。

編集:

PHPコードについては、次のようにします。

function createdbtable($table,$fields)
{
    global $fsdbh;

    $sql = "CREATE TABLE IF NOT EXISTS `$table` (";
    $pk  = '';

    foreach($fields as $field => $type)
    {
      $sql.= "`$field` $type,";

      if (preg_match('/AUTO_INCREMENT/i', $type))
      {
        $pk = $field;
      }
    }

    $sql = rtrim($sql,',') . ', PRIMARY KEY (`'.$pk.'`)';

    $sql .= ") CHARACTER SET utf8 COLLATE utf8_general_ci";
    if($fsdbh->exec($sql) !== false) { return 1; }
}
于 2012-08-23T15:42:07.153 に答える