Модераторы: Aliance, skyboy, MoLeX, ksnk

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> C txt получиться SQL запрос! Создание из тектового файла SQL запрос 
:(
    Опции темы
RageHunter
Дата 10.1.2008, 17:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 23
Регистрация: 10.1.2008

Репутация: нет
Всего: нет



Здравствуйте!
Попытаюсь максимально понятно обрисовать ситуацию!
Есть текстовой файл примерно такого содержания
Код

123,3423,545,5654,67,67,7867,9,34545,345,3454,432,234,545,56,67,68
455,3452,234,2345,34,34,2344,2,34455,234,2345,342,343,344,34,23,77
и т.д.

Можно ли средствами php и если можно, то как сделать так, что бы после обработки скрипт запасал в другой текстовой файл уже готовый sql запрос
Код

INSERT INTO `название таблицы` VALUES (
'123'
'3423'
'545'
'5654'
'67'
'67'
'7867'
'9'
'34545'
'345'
'3454'
'432'
'234'
'545'
'56'
'67'
'68'
);

INSERT INTO `название таблицы` VALUES (
'455'
'3452'
'234'
'2345'
'34'
'34'
'2344'
'2'
'34455'
'234'
'2345'
'342'
'343'
'344'
'34'
'23'
'77'
);
и т.д.

Помогите люди! Заранее спасибо!

PM MAIL   Вверх
Sunvas
Дата 10.1.2008, 17:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Соль и сахар
****


Профиль
Группа: Участник
Сообщений: 3388
Регистрация: 12.3.2006
Где: Тосно

Репутация: 1
Всего: 89



Нуу. Примерно так надо:

Код

$s="123,3423,545,5654,67,67,7867,9,34545,345,3454,432,234,545,56,67,68";
implode("' '",explode(",",$s));


На выходе получишь:
'123' '3423' '545' '5654' '67' '67' '7867' '9' '34545' '345' '3454' '432' '234' '545' '56' '67' '68'




--------------------
Воспитывая детей по своему образу и подобию, родители почему-то надеются, что они будут лучше их.
PM MAIL   Вверх
flashaa
Дата 10.1.2008, 17:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 796
Регистрация: 7.3.2006

Репутация: 2
Всего: 25



Вроде так будет кратко:
Код

foreach(file('файл.txt') as $row) {

     array_walk($row, create_function('&$x', 'return \'$x\'')); // обрамляем кавычками элементы
     file_put_contents('другой_файл.txt', 'INSERT INTO `название_таблицы_откуда_брать_неясно` VALUES (' . implode(",\n", $row)  . "); \n");

}


Это сообщение отредактировал(а) flashaa - 10.1.2008, 17:43
PM MAIL   Вверх
RageHunter
Дата 10.1.2008, 20:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 23
Регистрация: 10.1.2008

Репутация: нет
Всего: нет



Первый вариант не устраивает так как файл лежит на удаленном сервере и я не могу каждые 30 секунд 1000 строк в код вписывать!

Второй вариант я так понял это то что мне надо но чё то ошибочки поперли!
 
Код

Parse error: parse error, unexpected '}' in H:\home\localhost\index.php(3) : runtime-created function on line 1

Warning: array_walk() [function.array-walk]: The argument should be an array in H:\home\localhost\index.php on line 3

Parse error: parse error, unexpected '}' in H:\home\localhost\index.php(3) : runtime-created function on line 1

Warning: array_walk() [function.array-walk]: The argument should be an array in H:\home\localhost\index.php on line 3

Warning: implode() [function.implode]: Bad arguments. in H:\home\localhost\index.php on line 4


Будь добр, помоги и с этим разобраться!
Я даже догнать не могу отуда он эту "}" взял!

Это сообщение отредактировал(а) RageHunter - 10.1.2008, 20:08
PM MAIL   Вверх
flashaa
Дата 10.1.2008, 21:43 (ссылка)   | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 796
Регистрация: 7.3.2006

Репутация: 2
Всего: 25



PageHunter, сорри щас попытаюсь отладить.
Код

<?php

$s = '';
foreach(file('txt1.txt') as $row) { // cчитываем файл в массив, перебираем его строки
    
     $row = explode(',', $row); // строку из элементов чере запятую превращаем в массив
     array_walk($row, create_function('&$x', '$x = "\'" . $x . "\'" ;')); // обрамляем кавычками элементы
     $s .= 'INSERT INTO `название_таблицы_откуда_брать_неясно` VALUES (' . implode(",\n", $row)  . "); \n"; // добавляем запись
}

file_put_contents('txt2.txt', $s); // полученную запись пишем во второй файл
?>

Вот, отладил на твоих примерах должно работать.
PM MAIL   Вверх
RageHunter
Дата 10.1.2008, 22:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 23
Регистрация: 10.1.2008

Репутация: нет
Всего: нет



Спасибо flashaa!
Все отлично работает и это то что надо!

Сталкнулся еще с тремя проблемами:

1 
Как перед строку из элементов чере запятую превращаем в массив сделать так чтобы с текста(массива) удалились запрещенные символы (под запрещенными я подразумеваю символы типа ` ' ; и т.п.)! Что бы При формировании sql запроса получалось не 'Rage'Hunter' (написано в первом файле Rage'Hunter), а получилось 'Rage Hunter' или  'RageHunter'? Получается две разные записи, а не одна!

2
Если можно то не помешает скрипт для выполнения запроса с текстового файла (я пробовал написать но у меня только одна первая строка заноситься)

3
Оказалось что запрос выполняется не полностью (55 записей добавляет пробовал через phpmyadmin, так что скорее всего и скиптом тоже все не выполнит) не хватает времени ему (на сколько я понял), так вот, как можно его разбить на n-ое кол-во файлов например по 50 записей(строк)? В файле примерно 600 строк в строке 64 значения, строки большие и в таблице 64 поля.

Это сообщение отредактировал(а) RageHunter - 11.1.2008, 03:14
PM MAIL   Вверх
bars80080
Дата 14.1.2008, 10:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 2
Всего: 315



1. http://php.ru/manual/function.str-replace.html

2. не фиговые у тебя файлы, может проблема в торможении самого скрипта, может его можно облегчить?
PM MAIL WWW   Вверх
flashaa
Дата 14.1.2008, 13:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 796
Регистрация: 7.3.2006

Репутация: 2
Всего: 25



PageHunter, опиши более общим образом задачу. В примерах были приведены цифры, потому под них и был написан скрипт.

В частности, опиши какого рода данные хранятся в общем случае в txt1. Это будет влиять на решение вот этого вопроса:
Цитата(RageHunter @  10.1.2008,  22:09 Найти цитируемый пост)
Что бы При формировании sql запроса получалось не 'Rage'Hunter' (написано в первом файле Rage'Hunter), а получилось 'Rage Hunter' или  'RageHunter'? Получается две разные записи, а не одна!


Цитата(RageHunter @  10.1.2008,  22:09 Найти цитируемый пост)
2
Если можно то не помешает скрипт для выполнения запроса с текстового файла (я пробовал написать но у меня только одна первая строка заноситься)

Расширение mysqli позволяет выполнять строки с несколькими запросами, mysql этого не может. Если есть mysqli думаю есть смысл использовать в данном моменте именно его, чтобы не наращивать попусту  код. Если нет, тогда будем думать.

Цитата(RageHunter @  10.1.2008,  22:09 Найти цитируемый пост)

Оказалось что запрос выполняется не полностью (55 записей добавляет пробовал через phpmyadmin, так что скорее всего и скиптом тоже все не выполнит) не хватает времени ему (на сколько я понял), так вот, как можно его разбить на n-ое кол-во файлов например по 50 записей(строк)? В файле примерно 600 строк в строке 64 значения, строки большие и в таблице 64 поля.

set_time_limit(0); отключает ограничение по времени исполнения скрипта.

Вообще эти операции сильно напоминают бек-ап/восстановление или что-то типа того. Опиши, пожалуйста, в общих чертах, что ты хочешь сделать? Возможно, имеется решение внутри самой бд без посредников в виде текстовых файлов.
PM MAIL   Вверх
InfMag
Дата 14.1.2008, 13:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


…
***


Профиль
Группа: Завсегдатай
Сообщений: 1037
Регистрация: 21.11.2004

Репутация: нет
Всего: 4



RageHunter, mysql_escape_string() ??
PM   Вверх
FractalizeR
Дата 14.1.2008, 20:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 273
Регистрация: 27.12.2007
Где: Россия/Москва

Репутация: нет
Всего: 4



Цитата(flashaa)

Расширение mysqli позволяет выполнять строки с несколькими запросами, mysql этого не может. Если есть mysqli думаю есть смысл использовать в данном моменте именно его, чтобы не наращивать попусту  код. Если нет, тогда будем думать.

Необязательно пользоваться mysqli. MySQL позволяет в одном INSERT вставлять несколько строк: 
Код

INSERT INTO tbl_name (a,b,c) VALUES(1,2,3),(4,5,6),(7,8,9);


Это сообщение отредактировал(а) FractalizeR - 14.1.2008, 20:15


--------------------
Чтобы поблагодарить или наоборот поругать участника форума лучше пользоваться значками "+" и "-", изменяющими репутацию. Они находятся слева от поста под именем пользователя.
PM MAIL   Вверх
RageHunter
Дата 15.1.2008, 16:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 23
Регистрация: 10.1.2008

Репутация: нет
Всего: нет



Спасибо что помогаете!
Опишу более подробно!
Есть удаленный игровой сервер Counter Strike Source на нем стоин mani admin plugin (для тех кто не знает это система администрирования сервера), так вот mani admin plugin ведет статистику по игрокам и записыет их в файл в виде 
Код

STEAM_0:0:14978972,89.178.219.184,1200098327,1,7813,3998,1896,7562,214,101,421256,1225162,1937,3296,9340,5615,4429,2770,3166,2906,409,1769,246,346,751,32,14,38,255,417,15,11,10,1360,80,13,3,366,51,7,197,131,10,4,2,26,0,0,159771,33459,167,55,3,89,15,39,213,103,0,0,1952,1247,1971,1292,Nitro
STEAM_0:1:10094074,194.6.220.211,1200084803,2,7237,4451,2280,8405,327,225,378644,1443725,2306,4060,10201,6544,5764,3104,3741,3371,145,2265,121,147,550,15,34,56,963,308,3,5,46,1746,39,29,3,203,126,46,86,385,64,89,1,6,0,0,158990,39091,94,34,5,64,2,27,151,86,0,0,1828,1336,1857,1257,Sdal ekzamen
STEAM_0:0:15848495,85.142.2.33,1199996291,3,6954,3759,1703,6613,267,141,337026,1078062,1839,2944,8388,5684,4553,2591,3274,3014,463,1237,75,194,738,22,17,113,599,280,5,4,20,1301,37,21,4,217,39,8,171,392,40,20,11,46,0,0,113274,32287,38,37,3,118,10,5,224,106,0,0,1426,1008,1406,913,ангел-хоронитель
STEAM_0:1:13242021,85.141.237.43,1200098327,4,6931,1036,468,1922,199,30,117498,371599,1773,838,1678,749,864,409,358,307,117,162,40,89,258,25,4,41,122,449,1,2,9,10,16,10,0,26,67,0,17,24,17,19,0,5,0,0,24327,6976,60,16,0,43,10,23,50,28,0,0,365,362,584,371,[BHT]Ha6yлaм Kyлaтypa
STEAM_0:1:10606012,78.106.225.119,1200098264,5,6744,1217,480,2326,70,37,112205,389821,2192,962,2032,1400,1377,694,929,847,32,514,27,21,80,17,15,40,313,292,1,0,51,25,10,15,0,30,104,9,39,21,3,1,0,0,0,0,42389,10433,34,11,2,40,1,6,47,26,0,0,542,469,375,309,Agr.

В этой файле 65 значений последнее из которых Ник - одна из моих проблем такова что при выполнении sql запроса через php такие имена как -=V!$@R=- не проходят из -за них ошибка т.к. в нике используестся $ и он(php) часть ника принимет как переменная(помоему так называется).
а на счет SQL запроса сделал проще(тока конечно же это не безопасно) я переписал не много  и дополнил скрипт flashaa и получил 
Код

include "configurat.php";
$connection = ftp_connect($serverip, $port);
ftp_login($connection, $username, $password);
ftp_get($connection, $file1, $basepath.$file1, FTP_ASCII);
$s = '';
foreach(file('mani_ranks.txt') as $row) { // cчитываем файл в массив, перебираем его строки
    
     $row = explode(',', $row); // строку из элементов чере запятую превращаем в массив
     array_walk($row, create_function('&$x', '$x = "\'" . $x . "\'" ;')); // обрамляем кавычками элементы
     $s .= '<?'."\n".'mysql_query("INSERT INTO `'.$table.'` VALUES (' . implode(",", $row)  . ')", $link);?'.">"."\n"; // добавляем запись
}

file_put_contents($file3, $s); // полученную запись пишем во второй файл

скрипт копирует файл с одного сервера на другой там обрамляет ковычками и записывает в php файл, после чего этот файл средством  require ($file3); всавляется в другой скритп и он без проблем выполняет все запросы даже 600 строк

У меня единственнаяя проблема которая осталось это как избавиться от таких символов как   $ ` ' ;  в 65 значении txt файла?
PM MAIL   Вверх
sTa1kEr
Дата 16.1.2008, 13:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


9/10 программиста
***


Профиль
Группа: Завсегдатай
Сообщений: 1553
Регистрация: 21.2.2007

Репутация: 5
Всего: 146



Зачем такие извращения? Сгенерировать корректный запрос очень просто. И не в коем случае никаких require(), eval(), etc...
Для того что бы запрос выполнялся корректно, экранируем все данные.
Код

<?php
$fp = fopen(__FILE__, 'r'); // Файл из которого читаем статистику, для отладки читаем из этого же файла
/* Только для отладки */ fseek($fp, __COMPILER_HALT_OFFSET__);

// Аннонимная функция, которая экранирует и обрамляет в кавычки каждый элемент.
// Если соединение с БД установлно, то вместо mysql_escape_string() лучше использовать mysql_real_escape_string()
$func = create_function('$l,$r', 'return ($l .= (empty($l) ? "" : ",")."\'".mysql_escape_string($r)."\'");');

$sql = 'INSERT INTO `table` VALUES ';
$values = "";

while(($row = fgets($fp)) !== false)
{
   $row = trim($row);
   if (empty($row)) continue;

   $cells = explode(',', $row);
   // if (count($cells) != 65) die("Count columns not equals 65"); // Можно добавить для проверки
 
   $values .= (empty($values) ? '' : ",\n").'('.array_reduce($cells, $func).")";
}
fclose($fp);
file_put_contents("out.sql", $sql.$values); // Готовый для исполнения запрос


/* Только для отладки */ __halt_compiler();
STEAM_0:0:14978972,89.178.219.184,1200098327,1,7813,3998,1896,7562,214,101,421256,1225162,1937,3296,9340,5615,4429,2770,3166,2906,409,1769,246,346,751,32,14,38,255,417,15,11,10,1360,80,13,3,366,51,7,197,131,10,4,2,26,0,0,159771,33459,167,55,3,89,15,39,213,103,0,0,1952,1247,1971,1292,Nitro
STEAM_0:1:10094074,194.6.220.211,1200084803,2,7237,4451,2280,8405,327,225,378644,1443725,2306,4060,10201,6544,5764,3104,3741,3371,145,2265,121,147,550,15,34,56,963,308,3,5,46,1746,39,29,3,203,126,46,86,385,64,89,1,6,0,0,158990,39091,94,34,5,64,2,27,151,86,0,0,1828,1336,1857,1257,Sdal ekzamen
STEAM_0:0:15848495,85.142.2.33,1199996291,3,6954,3759,1703,6613,267,141,337026,1078062,1839,2944,8388,5684,4553,2591,3274,3014,463,1237,75,194,738,22,17,113,599,280,5,4,20,1301,37,21,4,217,39,8,171,392,40,20,11,46,0,0,113274,32287,38,37,3,118,10,5,224,106,0,0,1426,1008,1406,913,ангел-хоронитель
STEAM_0:1:13242021,85.141.237.43,1200098327,4,6931,1036,468,1922,199,30,117498,371599,1773,838,1678,749,864,409,358,307,117,162,40,89,258,25,4,41,122,449,1,2,9,10,16,10,0,26,67,0,17,24,17,19,0,5,0,0,24327,6976,60,16,0,43,10,23,50,28,0,0,365,362,584,371,[BHT]Ha6yлaм Kyлaтypa
STEAM_0:1:10606012,78.106.225.119,1200098264,5,6744,1217,480,2326,70,37,112205,389821,2192,962,2032,1400,1377,694,929,847,32,514,27,21,80,17,15,40,313,292,1,0,51,25,10,15,0,30,104,9,39,21,3,1,0,0,0,0,42389,10433,34,11,2,40,1,6,47,26,0,0,542,469,375,309,Agr.

PM MAIL   Вверх
flashaa
Дата 21.1.2008, 19:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 796
Регистрация: 7.3.2006

Репутация: 2
Всего: 25



Цитата(FractalizeR @  14.1.2008,  20:14 Найти цитируемый пост)
Необязательно пользоваться mysqli. MySQL позволяет в одном INSERT вставлять несколько строк: 

Не спорю. Но это - обобщение задачи. Если идти таким путем,то можно было бы все решить намного проще,чем есть. Но задача поставлена так как поставлена.
PM MAIL   Вверх
RageHunter
Дата 24.1.2008, 02:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 23
Регистрация: 10.1.2008

Репутация: нет
Всего: нет



Цитата

У меня единственнаяя проблема которая осталось это как избавиться от таких символов как   $ ` ' ;  в 65 значении txt файла?

Вот эту проблему помогите решить, плиз!!!
PM MAIL   Вверх
GeneralElectric
Дата 24.1.2008, 09:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 797
Регистрация: 11.1.2008

Репутация: 0
Всего: 16



PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Тексты | Следующая тема »


 




[ Время генерации скрипта: 0.0696 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.