Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / [PHP + MySQL] Как за один раз добавить в таблицу массив значений? / 21 сообщений из 21, страница 1 из 1
21.05.2012, 15:43:34
    #37804146
AndreyK0
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[PHP + MySQL] Как за один раз добавить в таблицу массив значений?
Доброго всем дня!
Задача: большой xml файл (13мб) распарсить и засунуть в базу.
Пользуюсь XMLReader, т.к. другие способы не освоил/не подходят,
поэтому полученные из xml данные запихиваю в массив (23000 значений).
Необходимо потом эти значения вставить в базу, но что-то не получается.
foreach не подойдет, т.к. очень много значений.
Естественно такой код не работает:
Код: php
1.
$insert=mysql_query("INSERT INTO price (kod) VALUES ('$kodes')");


где $kodes - массив
подозреваю что нужно как-то через implode, но никак не получается...

Подскажите пожалуйста!
...
Рейтинг: 0 / 0
21.05.2012, 16:02:12
    #37804212
Hett
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[PHP + MySQL] Как за один раз добавить в таблицу массив значений?
foreach - чем не подойдет?

Код: php
1.
$insert=mysql_query('INSERT INTO price (kod) VALUES (' . implode('),(', $kodes . ')');



но не знаю как он переварит 23к значений.
В крайнем случае разбивайте с помощью array_slice и пихайте частями.
...
Рейтинг: 0 / 0
21.05.2012, 16:02:49
    #37804216
Hett
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[PHP + MySQL] Как за один раз добавить в таблицу массив значений?
Не забудьте обезопасить данные.
...
Рейтинг: 0 / 0
21.05.2012, 16:05:30
    #37804224
AndreyK0
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[PHP + MySQL] Как за один раз добавить в таблицу массив значений?
foreach 23к значений 10-15 минут пихает...
в php новичок, сейчас буду курить array_slice
а что вы имеете в виду под "обезопасить"?
...
Рейтинг: 0 / 0
21.05.2012, 16:18:13
    #37804251
AndreyK0
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[PHP + MySQL] Как за один раз добавить в таблицу массив значений?
Спасибо!!! Работает, чуть подкорректировал и все 23к залетают в таблицу в момент
Код: php
1.
2.
$q = "INSERT INTO price (kod) VALUES ('".implode("'), ('", $kodes)."')";
$insert = mysql_query($q);



Все-же, что значит "обезопасить данные"?
...
Рейтинг: 0 / 0
21.05.2012, 18:22:29
    #37804577
Hett
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[PHP + MySQL] Как за один раз добавить в таблицу массив значений?
Ну вот если в данных попадется кавычка, например, или т.п.
http://ru.wikipedia.org/wiki/Внедрение_SQL-кода
...
Рейтинг: 0 / 0
21.05.2012, 18:23:28
    #37804579
Hett
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[PHP + MySQL] Как за один раз добавить в таблицу массив значений?
ну кавычки я там специально писать не стал.
...
Рейтинг: 0 / 0
21.05.2012, 18:25:05
    #37804580
Жырный
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[PHP + MySQL] Как за один раз добавить в таблицу массив значений?
AndreyK0,

Код: php
1.
2.
3.
$arr = array('lol', 'xdd', "\x00");
$safe_arr = array_map('mysql_real_escape_string', $arr);
$sql = "INSERT INTO tbl VALUES('" . implode("', '", $safe_arr) . "');";
...
Рейтинг: 0 / 0
21.05.2012, 18:36:47
    #37804594
ScareCrow
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[PHP + MySQL] Как за один раз добавить в таблицу массив значений?
; drop table, да.
http://xkcd.ru/327/
...
Рейтинг: 0 / 0
21.05.2012, 18:43:56
    #37804607
MikkiMouse
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[PHP + MySQL] Как за один раз добавить в таблицу массив значений?
AndreyK0,

Прикол XML-ридера как раз в том, что он парсер потоковый. То есть считал кусок, запихнул в базу и читай дальше - о том уже забыл. Вот ссылочка полезная , кстати, об этой всей байде.
...
Рейтинг: 0 / 0
21.05.2012, 18:51:15
    #37804616
Hett
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[PHP + MySQL] Как за один раз добавить в таблицу массив значений?
ScareCrow; drop table, да.
http://xkcd.ru/327/

Это выражение в кавычках будет воспринято как текстовые данные.
...
Рейтинг: 0 / 0
22.05.2012, 10:02:01
    #37805187
AndreyK0
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[PHP + MySQL] Как за один раз добавить в таблицу массив значений?
Спасибо большое за совету новичку!!
...
Рейтинг: 0 / 0
22.05.2012, 10:40:38
    #37805256
AndreyK0
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[PHP + MySQL] Как за один раз добавить в таблицу массив значений?
Опять беда :(
с использованием $safe_arr данные не заносятся в базу. Т.е.:
без использования $safe_arr запрос имеет вид и выполняется нормально:
Код: php
1.
INSERT INTO merlion_price (kod, name, price) VALUES ('45708', 'Блок питания FSP ATX 350W 350PNF 20+4 pin, PPFC ,120mm fan, I/O Switch, SATA', '865'), ('86411', 'Блок питания FSP ATX 350W 350PNR 20+4 pin, 120mm fan, I/O Switch, 2*SATA', '702'), ('637400', 'Блок питания FSP ATX 400W 400-60APN 80+ 20+4 pin, PPFC, 120mm fan, I/O Switch, SATA', '1153')


а с $safe_arr такой:
Код: php
1.
INSERT INTO merlion_price (kod, name, price) VALUES (\'45708\', \'Блок питания FSP ATX 350W 350PNF 20+4 pin, PPFC ,120mm fan, I/O Switch, SATA\', \'865\'), (\'86411\', \'Блок питания FSP ATX 350W 350PNR 20+4 pin, 120mm fan, I/O Switch, 2*SATA\', \'702\'), (\'637400\', \'Блок питания FSP ATX 400W 400-60APN 80+ 20+4 pin, PPFC, 120mm fan, I/O Switch, SATA\', \'1153\')


и база пуста после запроса (
...
Рейтинг: 0 / 0
22.05.2012, 10:45:53
    #37805274
r u
r u
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[PHP + MySQL] Как за один раз добавить в таблицу массив значений?
AndreyK0,

эскейпить надо не весь запрос а данные попадающие в него
...
Рейтинг: 0 / 0
22.05.2012, 10:49:53
    #37805279
AndreyK0
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[PHP + MySQL] Как за один раз добавить в таблицу массив значений?
вот полнее код:
Код: php
1.
2.
3.
4.
$que = array_slice($base, $j, $i);
$que = array_map('mysql_real_escape_string', $que);
$que = implode(', ', $que);
$q = "INSERT INTO merlion_price (kod, name, price) VALUES $que";
...
Рейтинг: 0 / 0
22.05.2012, 10:50:41
    #37805280
Hett
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[PHP + MySQL] Как за один раз добавить в таблицу массив значений?
Вам же показали
Жырный
Код: php
1.
2.
3.
$arr = array('lol', 'xdd', "\x00");
$safe_arr = array_map('mysql_real_escape_string', $arr);
$sql = "INSERT INTO tbl VALUES('" . implode("', '", $safe_arr) . "');";
...
Рейтинг: 0 / 0
22.05.2012, 11:27:13
    #37805372
AndreyK0
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[PHP + MySQL] Как за один раз добавить в таблицу массив значений?
Все, понял.
использовал addslashes еще на стадии чтения xml. Все работает, спасибо!
...
Рейтинг: 0 / 0
22.05.2012, 11:32:16
    #37805384
Hett
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[PHP + MySQL] Как за один раз добавить в таблицу массив значений?
mysql_real_escape_string
...
Рейтинг: 0 / 0
22.05.2012, 11:41:16
    #37805412
AndreyK0
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[PHP + MySQL] Как за один раз добавить в таблицу массив значений?
сделал через mysql_real_escape_string, все работает
ткните в меня палкой за мою тупость :)
...
Рейтинг: 0 / 0
22.05.2012, 15:25:32
    #37806117
dresden
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[PHP + MySQL] Как за один раз добавить в таблицу массив значений?
Hett,
Hettmysql_real_escape_string
я аж протрезвел)))
...
Рейтинг: 0 / 0
22.05.2012, 19:55:09
    #37806615
Hett
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[PHP + MySQL] Как за один раз добавить в таблицу массив значений?
Я на одном сайте нашел фичу, не знаю как они там данные эскейпят, но там кавычки не экранируются, а заменяются на слеш \

Получается с помощью этих слешей можно закомментировать настоящие (которые добавляются скриптом).
Только я еще не придумал как закрыть кавычку теперь (
Получается если передать одну кавычку, то выпадает запрос:

Код: sql
1.
Error in SQL: select page_id, template_id from pages_ru where page_html='\' and parent_id=8



т.к. слеш превратился в кавычку и заэкранировал закрывающую кавычку
...
Рейтинг: 0 / 0
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / [PHP + MySQL] Как за один раз добавить в таблицу массив значений? / 21 сообщений из 21, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]