|
|
|
| Доброго времени суток. Созрела очередная задачка))))
Итак из 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 раз, получив все числа в виде одного параметра.....
Какой вариант предпочтительнее? Или может быть есть третий вариант? | |
|
|
|
|
|
|
|
для: 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);
?>
|
| |
|
|
|
|
|
|
|
для: jonik
(29.09.2011 в 15:48)
| | Если проблема в том, чтобы разбить строку обратно в массив, то это легко выполнить при помощи функции explode();
<?php
$arr = explode(", ", "24, 554, 1, 33, 90");
?>
|
| |
|
|
|
|
|
|
|
для: cheops
(29.09.2011 в 16:40)
| | НУ КОНЕЧНО!!!!!!! МНОГОСТРОЧНЫЙ ИНСЕРТ!!!!!!!!! Вот слона то я и не приметил!!!!! Спасибо большое!! Примерно так и поступлю, только загоню SQL-запрос в процедуру, но смысл останеться.... Массив->Строка->многострочный инсерт. | |
|
|
|