Здравствуйте, такая проблема. Обновляю информацию в базе mysql. делаю все это дело через вывод Код (Text): while(){ } Построение запроса такое. Код (Text): $servers = mysql_query("SELECT * FROM servers"); В базе более 19000 записей. И выводить он их всех не хочет. Разбил базу на несколько частей. Код (Text): $limit=$_GET['limit']; /0/2000/4000/6000/8000/ <<< Значения запроса. $servers = mysql_query("SELECT * FROM servers LIMIT $limit,2000"); Ну вообщем так до 19000. То есть обновляет по 2000 записи. Потому что все 19000 обновить не получается. И тут проблема такая, обновляются не все записи, некоторые он просто пропускает. как буд то не видит. Если перестроить запрос и вписать ID именно той записи, которую он не обновил, то он ее успешно обновляет. В цикле видимо ее не выводит. Как решить проблему? Подскажите как сделать чтобы выводились все записи. В базе некоторых записей нет. ID записи идет не совсем по порядку, допустим ID - 1 ID - 2 ID - 5 ID - 8 ID - 9 ID - 11 И так далее. Может быть из за этого?
ниче не понятно - понятно что надо чтото обновить - но саму строчку обновления не видно. while тоже не полный .. чего вы тут насовали.. скрипт более цельный и понятный в студию а не куски из разных углов Добавлено спустя 52 секунды: ах да если строчек будет много пишите [ code=php ]
Я даже боюсь представить что будет дальше //////////////////////////////////////////////////////////////////////////////////////////////////// А теперь подробно опиши зачем апдейтить такое количество записей, что именно ты апдейтишь.
обращение в цикле к базе чревато именно такими последствиями, не делайте апдэйт через вывод. Просто выполните запрос UPDATE ... WHERE ... 1 раз
Так у update нету многострочной формы, как у Insert. Тут в соседней ветке уже приводили какие-то трудноперевариваемые рецепты, как его всё же сделать, но по мне лучше цикл. И то что используется цикл не причём - обновлял похожим способом базы с неменьшим количеством записей, и ничего, всё работало. Так что код в студию. Весь.
http://sqlfiddle.com/#!2/39577/1 - вот это кошмар, особенно если сюда все 19 000 записей поставить Вот это тоже не всегда уместно: http://stackoverflow.com/questions/3432/multiple-updates-in-mysql
Вот вам этот кошмар, который не хочет обновлять. Код (Text): $servers = dbquery("SELECT * FROM amx_servers LIMIT $limit,2000"); $date_proverka = date("d-m-Y: G:i:s",time()); // запоминаем дату while($r=dbarray_fetch($servers)) { list( $aipi_adr_obrez, $port_adr ) = explode(':', $r[server_ip]); $ipv4 = gethostbyname($aipi_adr_obrez); $serv=serverInfo("$ipv4:$port_adr"); //Сбор информации if($serv['status']==''){ $result = dbquery("UPDATE amx_servers SET `server_name`='Server Is OFF Line', `server_status`='0', `server_map`='', `server_players`='0', `server_maxplayers`='0' WHERE server_id='".$r['server_id']."'"); continue; }else{ $name_filtered_server = mysql_real_escape_string($serv['name']); //Фильтр данныйх $result = dbquery(" UPDATE amx_servers SET server_name = '".$name_filtered_server."', server_map = '".$serv['map']."', server_windows = '".$serv['os']."', server_ping = '".$serv['ping']."', server_players = '".$serv['players']."', server_game='".$serv['version']."_".$serv['game']."', server_maxplayers = '".$serv['max_players']."', server_date_cron = '".$date_proverka."', server_status = '1' WHERE server_id='".$r['server_id']."' "); } if($result) {echo "".$r['server_id']." ";} else {echo "Ошибка ".$r['server_id']." ";} echo "<br>"; } Добавлено спустя 2 минуты 55 секунд: Если кого то смущают dbquery, dbarray_fetch То вот.) Код (Text): // MySQL функции function dbquery($query) { $result = @mysql_query($query); if (!$result) { echo mysql_error(); return false; } else { return $result; } } function dbarray_fetch($query) { $result = @mysql_fetch_array($query); if (!$result) { echo mysql_error(); return false; } else { return $result; } } function dbconnect($db_host, $db_user, $db_pass, $db_name) { $db_connect = @mysql_connect($db_host, $db_user, $db_pass); $db_select = @mysql_select_db($db_name); if (!$db_connect) { die("<div style='font-family:Verdana;font-size:11px;text-align:center;'><b>Не могу подключиться к MySQL</b><br />".mysql_errno()." : ".mysql_error()."</div>"); } elseif (!$db_select) { die("<div style='font-family:Verdana;font-size:11px;text-align:center;'><b>НЕ могу подключиться к MySQL базе данных</b><br />".mysql_errno()." : ".mysql_error()."</div>"); } } mysql_close();
Нет ковычек. Откуда это $r[server_ip]? Из базы? Подробней... Так писать точно не надо при таком объеме...
Кавычки решают? С ними не работает. Без них работает. А по коду не видно? while($r=dbarray_fetch($servers) Из базы $r[server_ip] А как писать при таком объеме? Я и так разделил базу как видите $servers = dbquery("SELECT * FROM amx_servers LIMIT $limit,2000"); $limit - переменная с GET запроса. Вывод по 2000 записей.
Код (Text): $serv=serverInfo("$ipv4:$port_adr"); Вот это - это запрос на другой сервер? В цикле он просто не может не видеть какие-то записи. Видимо условия в цикле не выполняются.
Да. В базе есть IP адреса. И каждый раз нужно к ним обращаться для получения данных, которые записываются в базу. Так вот цикл не хочет выводить все адреса. Некоторые пропускает.
Не может цикл чего-то не хотеть! Возьмите вместо тела цикла поставьте запись в файл какого-нибудь ID записи или что там у вас, убедитесь...