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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> вставка большого числа записей + транзакции + PDO 
V
    Опции темы
getme
Дата 14.7.2009, 18:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Как мне вставить скажем сто записей в одну таблицу и если все успешно проапдейтить 1ну запись с другой таблицы
все это должно быть на уровне транзакций.
должно быть два запроса как я понимаю, вопрос как выполнить вставку ста строк одним запросом?

в питоне помню есть чтото было mysql_insеrt_many( ..)
в пхп/PDO есть чтонибудь подобное?

Спасибо заранее
PM MAIL   Вверх
Nigel
Дата 14.7.2009, 21:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


познаю мир
**


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

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



А не проще воспользоваться LOAD DATA?
Есть вариант через LOCK TABLES ... (т.н. псевдотранзакции).
В пхп недавно обновили библиотеку для работы с mysql; раньше нельзя было использовать хранимки, транзакции, используя mysql_. Сейчас на новых версиях вроде поддерживается. Обычно используют mysqli для этих целей.
Код

$mysqli->autocommit(FALSE);
$mysqli->query(...);
$mysqli->query(...);
$mysqli->commit();

Смотрите сами, как сделать. Я бы выбрал 1-й вариант.
PM MAIL   Вверх
ksnk
Дата 14.7.2009, 22:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

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



Цитата(getme @  14.7.2009,  18:46 Найти цитируемый пост)
должно быть на уровне транзакций

Транзакции в MySql
Цитата(getme @  14.7.2009,  18:46 Найти цитируемый пост)
как выполнить вставку ста строк одним запросом?

insert ... values (...),(...),...


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
getme
Дата 15.7.2009, 09:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



ссори но это все не то, т.е insert ... values (...),(...),... это понятно
но я имел в виду ПДО и prepared staements

т.е вот что то

Код

$conn->beginTransaction();
try {
 $conn->query("INSERT INTO tabl1 (a,b)(?, ?)");
 $conn->execute(array( array(1,2),  array(2,3), array(3,4) ))
 $conn->query("UPDATE table2 SET com=1");
 $conn->execute(array());
 $conn->commit();
}
catch(PDOException $e) {
 $conn->rollBack();
}


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


Шустрый
*


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

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



неподумал что можно сделать так

Код

$conn->beginTransaction();
try {
 foreach ( ..)
 {
  $conn->query("INSERT INTO tabl1 (a,b)(?, ?)");
  $conn->execute(array( ..))
 }
 $conn->query("UPDATE table2 SET com=1");
 $conn->execute(array());
 $conn->commit();
}
catch(PDOException $e) {
 $conn->rollBack();
}


Это сообщение отредактировал(а) getme - 15.7.2009, 19:56
PM MAIL   Вверх
youri
Дата 17.7.2009, 09:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



лучше в цикле создать запрос, а послать его по завершении цикла, а не посылать кучу запросов
p.s. возможно лучше использовать LOAD DATA INFILE, быстрее работает
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Базы Данных | Следующая тема »


 




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


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

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