Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Вставить множество в таблицу.
 
 автор: jonik   (29.09.2011 в 15:48)   письмо автору
 
 

Доброго времени суток. Созрела очередная задачка))))

Итак из PHP в процедуру приходит текстовый параметр "24, 554, 1, 33, 90"
Соответственно изначально в PHP он хранится в виде массива, затем склеивается в подобную строку.
Необходимо сделать вставку в таблицу этих значений, чтобы было

Table 1

id digital

1 24
2 554
3 1
4 33
5 90

(таблица с автоинкрементом, посему на id внимание не обращаем)

Вижу 2 варианта решения задачи


1. При обходе массива в PHP при каждой итерации запускать процедуру и в качестве параметра задавать
по одному значению. Соответственно при каждой итерации будет происходить вставка только одного значения...

или..........

2. В самой процедуре средствами строковых функций произвести разбор строки, подготовить оператор, и в цикле делать execute и также вставлять по одному значению......

У первого варианта есть +, а именно отсутствие преобразований в строку и обратно.... Но зато при каждой итерации запускается процедура....... Второй вариант, конечно, выполняет много лишнего, но зато процедура запускается 1 раз, получив все числа в виде одного параметра.....

Какой вариант предпочтительнее? Или может быть есть третий вариант?

  Ответить  
 
 автор: cheops   (29.09.2011 в 16:39)   письмо автору
 
   для: jonik   (29.09.2011 в 15:48)
 

Лучше использовать третий вариант, преобразовать элементы массива в строки вида
<?php
$arr
[] = "(NULL, 24)";
$arr[] = "(NULL, 553)";
$arr[] = "(NULL, 1)";
$arr[] = "(NULL, 33)";
$arr[] = "(NULL, 90)";
?>

После чего объединить их в один многострочный INSERT запрос при помощи функции implode()
<?php
  $query 
"INSERT INTO tbl VALUES ".implode(", "$arr);
?>

  Ответить  
 
 автор: cheops   (29.09.2011 в 16:40)   письмо автору
 
   для: jonik   (29.09.2011 в 15:48)
 

Если проблема в том, чтобы разбить строку обратно в массив, то это легко выполнить при помощи функции explode();
<?php
  $arr 
explode(", ""24, 554, 1, 33, 90");
?>

  Ответить  
 
 автор: jonik   (29.09.2011 в 18:02)   письмо автору
 
   для: cheops   (29.09.2011 в 16:40)
 

НУ КОНЕЧНО!!!!!!! МНОГОСТРОЧНЫЙ ИНСЕРТ!!!!!!!!! Вот слона то я и не приметил!!!!! Спасибо большое!! Примерно так и поступлю, только загоню SQL-запрос в процедуру, но смысл останеться.... Массив->Строка->многострочный инсерт.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования