Проблем при дъмпване на база данни

DownFall

Registered
Здравейте,

Опитвам се да си напиша скриптче, с което да извличам информацията от база данните, след което да запиша данните в текстов файл и при нужда да го импортна през PMA например (демек backup).

Докарах го до тук и блокирах..

Код:
<?php
date_default_timezone_set('Europe/Sofia');
$db_server = '127.0.0.1';
$db_name = 'test';
mysql_connect($db_server, 'root', NULL) or die (mysql_error());
mysql_select_db($db_name) or die (mysql_error());

function dumper($table = NULL)
{
    global $db_server;
    
    $db = 'test';
    $dump = NULL;
    
    if(empty($table))
    {
        $q1= mysql_query("SHOW TABLES FROM `" . $db . "`") or die (mysql_error());
        while($r1 = mysql_fetch_assoc($q1))
        {
            $table = $r1['Tables_in_' . $db];
            $dump .= 'DROP TABLE IF EXISTS `' . $table . '`;' . "\n";
            $dump .= 'CREATE TABLE `hwreports`' . "\n" . '(' . "\n";
            
            $q2 = mysql_query("SHOW COLUMNS FROM `" . $table . "`") or die (mysql_error());
            while($r2 = mysql_fetch_assoc($q2))
            {
                $fieldName[] = $r2['Field'];
                $extra = ($r2['Null'] == 'NO') ? 'NOT NULL' : 'NULL';
                $extra .= (!empty($r2['Extra'])) ? ' ' . strtoupper($r2['Extra']) : NULL;
                $primary .= (empty($primary) && $r2['Key'] == 'PRI') ? $r2['Field'] : NULL;
                $implode1[] = sprintf("    `%s` %s %s", $r2['Field'], $r2['Type'], $extra);
                $rr2[] = $r2;
            }
            
            $dump .= implode(",\n", $implode1);            
            $dump .= (!empty($primary)) ? ",\n" . '    PRIMARY KEY (`' . $primary . '`)' : NULL;
            $dump .= "\n" . ');' . "\n\n";
            unset($primary);
            
            $q3 = mysql_query("SELECT * FROM `" . $table . "`") or die (mysql_error());
            
            foreach($fieldName as $f2)
                $rrr2[] = '`' . $f2 . '`';
            
            $fields = implode(',', $rrr2);
            
            while($r3 = mysql_fetch_assoc($q3))
            {
                foreach($r3 as $f3)
                    $rr3[] = '`' . $f3 . '`';
                
                $values = implode(',', $rr3);
                
                $dump .= "INSERT INTO `" . $table . "`(" . $fields . ") VALUES (" . $values . ");\n";
            }
        }
                
        //echo $dump;
            
            $fopen = fopen('dump.sql', 'w');
            fputs($fopen, $dump);
            fclose($fopen);
            //print_r($rr2);
            exit;
    }
}

dumper();
?>

Не е най-добрия вариант сигурно, но явно толкова са ми възможностите.. :) Пускам го за тест да дъмпне една от таблиците ми в база данните - ок, супер - извлича инфото и го запазва в файла без проблем, но при импорта PMA ми плюе

Код:
 MySQL said: Documentation
#1075 - Incorrect table definition; there can be only one auto column and it must be defined as a key

Заявката изглежда така
Код:
DROP TABLE IF EXISTS `hwreports`;
CREATE TABLE `hwreports`
(
    `uid` int(5) NOT NULL AUTO_INCREMENT,
    `filename` varchar(64) NOT NULL,
    `gamename` varchar(32) NOT NULL,
    `gameid` varchar(16) NOT NULL,
    `clienttag` varchar(8) NOT NULL,
    `gametype` varchar(16) NOT NULL,
    `gameoption` varchar(16) NOT NULL,
    `gamecreated` varchar(64) NOT NULL,
    `gamestarted` varchar(64) NOT NULL,
    `gameended` int(10) NOT NULL,
    `map` varchar(64) NOT NULL,
    `mapauth` varchar(32) NOT NULL,
    `mapsize` varchar(16) NOT NULL,
    `tileset` varchar(16) NOT NULL,
    `joins` int(2) NOT NULL,
    `maxplayers` int(2) NOT NULL,
    `host` varchar(16) NOT NULL,
    `port` int(5) NOT NULL,
    `p1name` varchar(32) NOT NULL,
    `p1result` varchar(8) NOT NULL,
    `p1rating` int(5) NOT NULL,
    `p1num` varchar(8) NOT NULL,
    `p1prob` varchar(8) NOT NULL,
    `p1k` int(3) NOT NULL,
    `p1adj` varchar(8) NOT NULL,
    `p1race` varchar(8) NOT NULL,
    `p1time` int(16) NOT NULL,
    `p1scoreoverall` int(8) NOT NULL,
    `p1units` int(8) NOT NULL,
    `p1structures` int(8) NOT NULL,
    `p1resources` int(8) NOT NULL,
    `p1unitsscore` int(8) NOT NULL,
    `p1produced` int(8) NOT NULL,
    `p1killed` int(8) NOT NULL,
    `p1lostu` int(8) NOT NULL,
    `p1structuresscore` int(8) NOT NULL,
    `p1constructed` int(8) NOT NULL,
    `p1razed` int(8) NOT NULL,
    `p1losts` int(8) NOT NULL,
    `p1resourcesscore` int(8) NOT NULL,
    `p1gas` int(8) NOT NULL,
    `p1minerals` int(8) NOT NULL,
    `p1spent` int(8) NOT NULL,
    `p2name` varchar(32) NOT NULL,
    `p2result` varchar(8) NOT NULL,
    `p2rating` int(5) NOT NULL,
    `p2num` varchar(8) NOT NULL,
    `p2prob` varchar(8) NOT NULL,
    `p2k` int(3) NOT NULL,
    `p2adj` varchar(8) NOT NULL,
    `p2race` varchar(8) NOT NULL,
    `p2time` int(16) NOT NULL,
    `p2scoreoverall` int(8) NOT NULL,
    `p2units` int(8) NOT NULL,
    `p2structures` int(8) NOT NULL,
    `p2resources` int(8) NOT NULL,
    `p2unitsscore` int(8) NOT NULL,
    `p2produced` int(8) NOT NULL,
    `p2killed` int(8) NOT NULL,
    `p2lostu` int(8) NOT NULL,
    `p2structuresscore` int(8) NOT NULL,
    `p2constructed` int(8) NOT NULL,
    `p2razed` int(8) NOT NULL,
    `p2losts` int(8) NOT NULL,
    `p2resourcesscore` int(8) NOT NULL,
    `p2gas` int(8) NOT NULL,
    `p2minerals` int(8) NOT NULL,
    `p2spent` int(8) NOT NULL,
    `p1normalrecord` varchar(32) NOT NULL,
    `p1ladderrecord` varchar(32) NOT NULL,
    `p2normalrecord` varchar(32) NOT NULL,
    `p2ladderrecord` varchar(32) NOT NULL,
    `gameduration` int(8) NOT NULL,
    PRIMARY KEY (`uid`)
);

Надявам се да помогнете :) благодаря предварително.
 
Така го правя в момента :) Малко след като пуснах темата разбрах за тази функция.. В общи линии го пренаписах почти целия код, но пак имам проблем..

Структурата я създавам без проблем със "SHOW CREATE TABLE", до тук добре, НО

Код:
INSERT INTO `pvpgn_bnet`
(
    `uid`,
    `acct_username`,
    `username`,
    `acct_userid`,
    `acct_passhash1`,
    `acct_email`,
    `email`,
    `approved_by`,
    `auth_admin`,
    `auth_normallogin`,
    `auth_changepass`,
    `auth_changeprofile`,
    `auth_botlogin`,
    `auth_operator`,
    `new_at_team_flag`,
    `auth_lockk`,
    `auth_command_groups`,
    `acct_lastlogin_time`,
    `acct_lastlogin_owner`,
    `acct_lastlogin_clienttag`,
    `acct_lastlogin_ip`,
    `acct_reg_ip`,
    `acct_ctime`,
    `auth_operator_Diablo_II`,
    `auth_voice_Dreaming`,
    `auth_operator_Dreaming`,
    `auth_voice_Diablo_II`,
    `auth_operator_Chat`,
    `auth_announce`,
    `auth_admin_Diablo_II`,
    `auth_mute`,
    `auth_admin_Dreaming`
)
VALUES
(
    `261`,`aaa`,`aaa`,`261`,``,`0`,``,``,`false`,`true`,`true`,`true`,`true`,`false`,`0`,`1`,`1`,`1275328729`,`Jivko`,`D2XP`,`83.228.117.50`,``,`1232471101`,``,``,``,``,``,``,``,`0`,``
);

Код:
#1054 - Unknown column '261' in 'field list'

Шах :D
 
Имаше още няколко пропуска, тях поне ги открих сам :D С малките бази данни работи добре (тествах го с такава, която съдържа 208 записа, за да не го тормозя прекалено докато го довърша). Опитам ли да дъмпна база данните от форума ми (104,772 записа, 14.4 MB) ме посреща приятното съобщение

Код:
The connection was reset
The connection to the server was reset while the page was loading.
The site could be temporarily unavailable or too busy. Try again in a few moments.
If you are unable to load any pages, check your computer's network connection.
If your computer or network is protected by a firewall or proxy, make sure that Minefield is permitted to access the Web.

Странното е, че ми го прави под всякакви браузъри, а когато го качих на другата машина изтеглих същата база данни без никакъв проблем и то за не повече от 2-3 секунди :idea:

Възможно ли е да е заради това, че съм с PHP 6 + MySQL 6? :idea:
 

Back
Горе