Перед созданием новой темы, пожалуйста, ознакомьтесь с FAQ по LinkorCMS

Создание установщика

Супер пользователь
Сообщений: 125
Я так понимаю класс mysql не умеет создавать таблицы с PRIMARY KEY ?
Супер пользователь
Сообщений: 125
Дописанная фун-я создания таблицы, с учетом запятых для полного текста и уникальных ключей. Добавлена поддержка первичного ключа.

<?
// Создаёт таблицу<br />
    public function CreateTable($name, $query, $dropex = fal
se){<br />
        $this->StartQ('Database->CreateTable()');<br />
        $sql = 'CREATE TABLE `'.$this->Prefix().$name.'` ('."\n";<br />
        for($i = 0; $i < count($query['cols']); $i++){<br />
            $sql .= $this->CollToSql($query['cols'][$i]);<br />
            if(isset($query['cols'][$i]['index'])){<br />
                $temp = ' INDEX `' . $query['cols'][$i]['name'] . '` (`' . $query['cols'][$i]['name'] . '`)';<br />
                if(isset($keys)){<br />
                    $keys .= ',' . "\n" . $temp;<br />
                }else{<br />
                    $keys = $temp;<br />
                }<br />
            }<br />
            elseif(isset($query['cols'][$i]['unique'])){<br />
                $temp = ' UNIQUE KEY `' . $query['cols'][$i]['name'] . '` (`' . $query['cols'][$i]['name'] . '`)';<br />
                if(isset($unique)){<br />
                    $unique .= ',' . "\n" . $temp;<br />
                }else{<br />
                    $unique = $temp;<br />
                }<br />
            }<br />
            elseif(isset($query['cols'][$i]['fulltext'])){<br />
                $temp = ' FULLTEXT KEY `' . $query['cols'][$i]['name'] . '` (`' . $query['cols'][$i]['name'] . '`)';<br />
                if(isset($fulltext)){<br />
                    $fulltext .= ',' . "\n" . $temp;<br />
                }else{<br />
                    $fulltext = $temp;<br />
                }<br />
            }<br />
            unset($temp);<br />
            if($i < count($query['cols']) - 1){<br />
                $sql .= ',' . "\n";<br />
            }<br />
        }<br />
        if(!empty($query['primary']))    $sql .= ",\n" . ' PRIMARY KEY (`' . $query['primary'] . '`)' . "\n";<br />
        if(isset($unique))        $sql .= ",\n" . $unique . "\n";<br />
        if(isset($keys))        $sql .= ",\n" . $keys . "\n";<br />
        if(isset($fulltext))     $sql .= ",\n" . $fulltext . "\n";<br />
        <br />
        $sql .= ')';<br />
        $sql .= !empty($query['type']) ? ' ENGINE=' . $query['type'] : ' ENGINE=MYISAM';<br />
        if(!empty($query['comment']))    $sql .= ' COMMENT="' . $query['comment'] . '"';<br />
        $sql .= ' DEFAULT CHARSET=cp1251 COLLATE=cp1251_gene
ral_ci;' . "\n\n";<br />
        <br />
        // выполняем запрос<br />
        if($dropex){<br />
            $this->DropTable($name);<br />
        }<br />
        if($this->MySQLQuery2($sql, 'Ошибка при создании таблицы.')){<br />
            return true;<br />
        }else{<br />
            return false;<br />
        }<br />
    }
?>

п.с. т.к. первичный ключ может быть всего один, то он вынесен из массива "cols".

-- Изменено "Fort": 05.04.2016 18:46 --
Гости не могут отвечать на темы. Войдите или Зарегистрируйтесь.
Здесь присутствуют
(пользователей: 0, гостей: 1)
Быстрый переход: