2012-08-23 88 views
2

使用PHP PDO查詢執行mySQL查詢。查詢由從foreach()輸入的大量信息組成。所以我已經迴應了sql查詢。問題出在這裏,但我看不到它。PHP PDO mySQL查詢創建表(如果不存在)

這是$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 - Incorrect table definition; there can be only one auto column and it must be defined as a key

+4

還有......是什麼問題? –

+0

在如上所述的SQL查詢中 –

+0

有什麼錯誤? – chantheman

回答

7

你忘了主鍵:

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 

錯誤是很明確的:

Schema Creation Failed: Incorrect table definition; there can be only one auto column and it must be defined as a key

您必須指定自動遞增的關鍵的關鍵。

編輯:

而對於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"; return $sql; 
    if($fsdbh->exec($sql) !== false) { return 1; } 
}