Недопереведено это типа не сырое, да? И пока это "не всё сырое" не уйдёт на php.net, толку новичкам от него ноль.
PHP: <? foreach ($xml->user as $id) { $sql="SELECT userid, username FROM haddan_user WHERE userid='".$id->userid."'"; $sql=mysql_query($sql); if (!$sql) { /*$username=mb_convert_encoding($id->username, "Windows-1251", "UTF-8"); $username=mysql_real_escape_string($username); $clanname=mb_convert_encoding($id->clanname, "Windows-1251", "UTF-8"); $clanname=mysql_real_escape_string($clanname); $roomname=mb_convert_encoding($id->roomname, "Windows-1251", "UTF-8"); $roomname=mysql_real_escape_string($roomname); $align=mb_convert_encoding($id->align, "Windows-1251", "UTF-8"); $align=mysql_real_escape_string($align);*/ $align=explode(';',$id->align); $time=time(); $newchar="INSERT INTO haddan_user SET userid='".$id->userid."', username='".mysql_real_escape_string($id->username)."', clan='".$id->clan."', sex='".$id->sex."', race='".$id->race."', level='".$id->level."', clanname='".mysql_real_escape_string($id->clanname)."', online='".$id->online."', roomname='".mysql_real_escape_string($id->roomname)."', aligImage='".$align[1]."', aligTitle='".$align[0]."', last_update_time='".$time."'"; mysql_query($newchar) or die ('Ошибка в запросе добавления '.mysql_error()); } else { $updchar="UPDATE haddan_user SET username='".mysql_real_escape_string($id->username)."', clan='".$id->clan."', sex='".$id->sex."', race='".$id->race."', level='".$id->level."', clanname='".mysql_real_escape_string($id->clanname)."', online='".$id->online."', roomname='".mysql_real_escape_string($id->roomname)."', aligImage='".$align[1]."', aligTitle='".$align[0]."', last_update_time='".$time."' WHERE userid='".$id->userid."'"; mysql_query($updchar) or die ('Ошибка в запросе обновления '.mysql_error()); } } Вот такая вот проблемма не сохраняет переменные которые в данный момент законвертированы никак не сохраняет... если вводить их в базу то скрипт просто забивает эти места вакуумом... =( а если использовать запрос без них то все в юникоде.
У insert нет команды set. Либо [sql]insert into table (поле1, поле2) values (значение1, значение2)[/sql] либо [sql]insert into table values (значение1, значение2)[/sql] Тогда значение1 вставится для первого поля, значение2 - для второго. Обычная последовательность - её можно увидеть в phpMyAdmin, чем выше поле, тем оно "первее". Опять двадцать-восемь. Курс лекций молодого бойца. Как не писать дебильный код. Ну, уж без обид. Работу с БД не надо сувать в цикл. Кол-во запросов будет увеличиваться с каждой итерацией. На некоторых хостингах есть строгое ограничение на количество запросов. В твой задаче что нужно? Получить список пользователей, отсутствующих в БД туда занести, существующих обновить. Очевидно, что select можно вынести? Можно. insert можно вынести? Можно. PHP: <? // получаем все id $ids = array(); foreach ($xml->user as $user){ $ids[] = $user->userid; } // Делаем им select $sql = 'SELECT userid FROM haddan_user WHERE userid in ('.join(', ', $ids).')'; Та-адан. Мы выберем всех пользователей, который есть. А как узнать id пользователей, которые не были найдены в базе? Очень просто. Выполнить запрос. Составить $exists_ids (существующие ids) и сравнить array_diff(). Теперь как победить insert в цикле? Категорически просто. PHP: <? $values = array(); foreach ($xml->user as $user){ $align = explode(';',$user->align); $values[] = array( $user->userid, mysql_real_escape_string($id->username), $id->clan, $id->sex, $id->race, $id->level, mysql_real_escape_string($id->clanname), $id->online, mysql_real_escape_string($id->roomname), $align[1], time() ); } // Сосяка-рассосяка! Мы созали insert способный сделать всё одним запросом! $insert = 'INSERT INTO haddan_user (userid, username, clan, sex, race, level, clanname, aligImage, aligTitle, last_update_time) values ('.join('), (', $values).')'; Но что-то я разп*зделся. Конкретно в данном случае я бы использовал insert ... on duplicate. Правда, не очень понял смысл обновления юзерей. Может, давно не спал, но кажется, что оно бессмысленно.
lexa Одно маленькое уточнение - в mysql у insert'а есть set. =)) http://dev.mysql.com/doc/refman/5.5/en/insert.html
PHP: $insert = 'INSERT INTO haddan_user (userid, username, clan, sex, race, level, clanname, aligImage, aligTitle, last_update_time) values ('.join('), (', $values).')'; что то мне ажется что такой запрос будет добавлять только самую последнюю запись. особенно когда вынесен за цикл ... спасибо за совет учту попробую адаптировать...
!!! он и правда есть. Я столько раз пересматривал доки мускула, но был настолько уверен в его отсутствии, что не обращал внимания. Ну и даун. $values массив всех данных из цикоа, мы его соединяем и вставляем в запрос. Будет выглядеть как-то так: [sql]insert into table (...) values (...), (...), (...)[/sql] Только один косяк, в цикле $values[] надо присваивать строку, а не массив, конечно же.