2016-05-13 2 views
0

Я пытаюсь сортировать одну таблицу (из 10k + строк) на две отдельные таблицы, но, похоже, работает в ошибке, которую я не могу понять. Когда я комментирую инструкции вставки mysqli, переменные печатаются правильно и обновляются по мере необходимости. Я могу видеть все данные с правильными ключами и значениями даже при прохождении всех значений в таблице.Почему мои переменные не обновляются в php mysqli for-loop?

Однако, когда я добавляю в инструкцию insert и размещаю его в mysqli_query, я неожиданно получаю кучу ошибок mysqli, говорящих о том, что внезапно дублируются первичные ключи, но, как и в предыдущих тестах, дубликатов нет. В других случаях, кажется, только один цикл, а затем остановка (или цикл правильное количество раз, но ничего не делая каждый раз. Я распечатал операторы mysql и смог убедиться, что все они были правильны, прежде чем пытаться выполнить запрос, и но она до сих пор вызывает вопросы, когда на самом деле работает код в полном объеме приведен ниже, но я не могу понять, что речь идет о жизни меня

$sql = "SELECT * FROM originalTable ORDER BY port LIMIT 20"; 
$result = mysqli_query($conn, $sql); 
$num_Rows = mysqli_num_rows($result); 
echo $num_Rows."<br/>"; 

// gets data for each row in the table 

for($i=0; $i<$num_Rows; $i++){ 
    $row = mysqli_fetch_assoc($result); 
    $ID = $row["ID"]; 
    echo $ID."<br/>"; 
    $IP = $row["IP"]; 
    echo $IP."<br/>"; 
    $port = $row["port"]; 
    echo $port."<br/>"; 
    $running = $row["running"]; 
    echo $running."<br/>"; 
    $afk = $row["afk"]; 
    echo $afk."<br/>"; 
    $gamemode = $row["gamemode"]; 
    echo $gamemode."<br/>"; 
    $maxplayers = $row["maxplayers"]; 
    echo $maxplayers."<br/>"; 
    $spawnprotection = $row["spawnprotection"]; 
    echo $spawnprotection."<br/>"; 
    $whitelist = $row["whitelist"]; 
    echo $whitelist."<br/>"; 
    $enablequery = $row["enablequery"]; 
    echo $enablequery."<br/>"; 
    $enablercon = $row["enablercon"]; 
    echo $enablercon."<br/>"; 
    $rconpassword = $row["rconpassword"]; 
    echo $rconpassword."<br/>"; 
    $motd = $row["motd"]; 
    echo $motd."<br/>"; 
    $announceachieve = $row["announceplayerachievements"]; 
    $allowflight = $row["allowflight"]; 
    $spawnanimals = $row["spawnanimals"]; 
    $spawnmobs = $row["spawnmobs"]; 
    $forcegamemode = $row["forcegamemode"]; 
    $hardcore = $row["hardcore"]; 
    $pvp = $row["pvp"]; 
    $difficulty = $row["difficulty"]; 
    $generatorsettings = $row["generatorsettings"]; 
    $levelname = $row["levelname"]; 
    $levelseed = $row["levelseed"]; 
    $leveltype = $row["leveltype"]; 
    $autosave = $row["autosave"]; 

    if($IP == $server1){ 
     $server = "server1table"; 
     $sql1 = "INSERT INTO server1table (id, ip, port, running, afk, gamemode, maxplayers, spawnprotection, 
       whitelist, enablequery, enablercon, rconpassword, motd, announceplayerachievements, 
       allowflight, spawnanimals, spawnmobs, forcegamemode, hardcore, pvp, difficulty, 
       generatorsettings, levelname, levelseed, leveltype, autosave) VALUES ('$ID', '$IP', 
       '$port', '$running', '$afk', '$gamemode', '$maxplayers', '$spawnprotection', '$whitelist', 
       '$enablequery', '$enablercon', '$rconpassword', '$motd', '$announceachieve', '$allowflight', '$spawnanimals', 
       '$spawnmobs', '$forcegamemode', '$hardcore', '$pvp', '$difficulty', '$generatorsettings', '$levelname', 
       '$levelseed', '$leveltype', '$autosave')"; 
     echo $sql1; 
     $result = mysqli_query($conn, $sql1); 
     echo "Server 1<br/>"; 
     if($result){ 
      echo "Success?"; 
     } 
     else{ 
      echo "Failure = " . $conn->error; 
     } 
    } else if ($IP == $Server2){ 
     $server = "server2table"; 
     $sql2 = "INSERT INTO server2table (id, ip, port, running, afk, gamemode, maxplayers, spawnprotection, 
       whitelist, enablequery, enablercon, rconpassword, motd, announceplayerachievements, 
       allowflight, spawnanimals, spawnmobs, forcegamemode, hardcore, pvp, difficulty, 
       generatorsettings, levelname, levelseed, leveltype, autosave) VALUES ('$ID', '$IP', 
       '$port', '$running', '$afk', '$gamemode', '$maxplayers', '$spawnprotection', '$whitelist', 
       '$enablequery', '$enablercon', '$rconpassword', '$motd', '$announceachieve', '$allowflight', '$spawnanimals', 
       '$spawnmobs', '$forcegamemode', '$hardcore', '$pvp', '$difficulty', '$generatorsettings', '$levelname', 
       '$levelseed', '$leveltype', '$autosave')"; 
     echo $sql2; 
     $result = mysqli_query($conn, $sql2); 
     echo "Server 2<br/>"; 
     if($result){ 
      echo "Success?"; 
     } 
     else{ 
      echo "Failure = " . $conn->error; 
     } 
    } 

EDIT:.. Идентификатор в таблице выше, не поле идентификатора таблицы или первичный ключ. Он представляет собой идентификатор плеера. Порт является первичным ключом таблицы

Уточнение: на одной итерации этого кода он отправил все на сервер 1 без проблем, но он полностью игнорировать ed server 2. С тех пор я тестировал и гарантировал, что команда split (if) работает так, как предполагалось, и печатает правильное имя сервера и задает $ sql для предполагаемого значения (по мере его распечатки). Он будет перемещать только первый столбец таблицы, а затем устанавливает все остальное в пустую, а идентификатор - 0 и отправляет кучу повторяющихся первичных ошибок.

+0

** Предупреждение ** вы просите об атаках на SQL-инъекции здесь! –

+0

Эта функция запускается только один раз и один раз. Он предназначен для переноса базы данных из одной основной базы данных в две отдельные на основе IP. Он не является общедоступным и, как таковой, не может иметь этот вопрос – KM529

+0

, что, если в данных есть отдельные кавычки? что нарушит ваши запросы –

ответ

0

Я не думаю, что вы должны вставлять идентификаторы, которые могут быть там, где вы сражаетесь, возможно, с главными ключами таблицы и auto_increment. Просто удалите идентификатор из вставки, и все должно быть хорошо. В зависимости от того, как вы настроили структуру таблицы. Как правило, вам не нужно сохранять идентификаторы, это просто для уникальности и индексирования домашнего хозяйства и т. Д.

+0

Идентификатор плохо назван в этом случае.На самом деле это идентификатор игрока, а не идентификатор таблицы. Первичным ключом таблиц является порт, и он также должен быть перенесен. – KM529

+0

Можете ли вы просто сделать это как dump/restore, а затем удалить ненужные строки из каждого? Или у вас нет доступа к CLI или phpMyAdmin? Другой способ - отключить автоматическое увеличение первичных ключей до запуска сценария. –

Смежные вопросы