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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Добавление в таблицу сразу не сколько строк. 
:(
    Опции темы
Igor_CH
Дата 5.6.2006, 16:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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




Подскажите как добавить в таблицу сразу несколько строк, т.е.:

делаю 
1. соединяюсь с базой
2. заполняю ячейки (их может быть сколько угодно)
Код

<input type="text" id="foto_1" name="foto_1">
<input type="text" id="foto_2" name="foto_2">
………

3. как записать каждую ячейку в свою строку в таблице.

Таблица из двух ячеек ID и FOTO.
 
PM MAIL   Вверх
skyboy
Дата 5.6.2006, 17:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

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



Код

INSERT INTO table(photo) VALUES(<photo1>),(<photo2>),(<photo3>)...

Где <photoX> - очередное фото. 
PM MAIL   Вверх
Igor_CH
Дата 5.6.2006, 17:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Так записывается в одну строку в разные ячейки, а мне нужно чтоб запись была:
ID   PHOTO
1     1.jpg
2      me.jpg
3      sdfsg.jpg
.......


и опять таки не известно сколько будет фото. 
PM MAIL   Вверх
skyboy
Дата 5.6.2006, 17:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

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



одну строку в разные ячейки записывают так:
Код

INSERT INTO Table(field1,field2,field3,field4) VALUES(<value1>,<value2>,<value3>,<value4>)

Обрати внимание на количество перечисленных полей после "INTO Table" и количество скобок после "VALUES"
А то, что я предложил пост назад, как раз и записывает несколько строк.

Добавлено @ 17:29 
когда ты будешь формировать запрос, ты ведь будешь уже точно знать количество фотографий, потому тебе ничто не помешает формировать запрос в цикле. 
PM MAIL   Вверх
Igor_CH
Дата 5.6.2006, 17:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Вот так я делаю:
Код

$foto_name_1 =$_POST["foto_1"];
$foto_name_2 =$_POST["foto_2"];
        
$text_1 =$_POST["text_1"];
$text_2 =$_POST["text_2"];

$sql_insert = "INSERT INTO photo (foto_name, text) VALUES  ( ($foto_name_1,$text_1), ($foto_name_2,$text_1) );";



Ошибка: Operand should contain 1 column(s) INSERT INTO photo (foto_name, text) VALUES ( ('1.jpg','text1'), ('2.jpg','text2') ); 
PM MAIL   Вверх
ASteel
Дата 5.6.2006, 17:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 24.5.2006
Где: Krasnodar, Russia

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



А я бы сделал так:
Код

$foto_name_1 =$_POST["foto_1"];
$foto_name_2 =$_POST["foto_2"];
        
$text_1 =$_POST["text_1"];
$text_2 =$_POST["text_2"];

$sql_insert = "INSERT INTO photo (foto_name, text) VALUES ('$foto_name_1','$text_1'), ('$foto_name_2','$text_1')";


Обрати внимание на скобки! 
PM MAIL WWW   Вверх
skyboy
Дата 5.6.2006, 17:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

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



Igor_CH, а зачем после "VALUES" ты ещё одними скобками оборачиваешь вводимые данные? 
Попробуй так:
Код

$sql_insert = "INSERT INTO photo (foto_name, text) VALUES  (".$foto_name_1.",".$text_1."), (".$foto_name_2.",".$text_1.");"
 
PM MAIL   Вверх
Igor_CH
Дата 5.6.2006, 18:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Большое спасибо!!! Все работает smile 
PM MAIL   Вверх
Igor_CH
Дата 5.6.2006, 18:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Продолжение начатого, чтоб не начинать новую тему. 
Подскажите как правильно сделать.

Есть форма, разобьем ее на две части:

1 часть -----------------
Название <input type=text name=nazvanie>
Описание <input type=text name=opisanie>

Данные записываются в таблицу KAT
Таблица “KAT” для этой части выглядит так:
ID  |  NAZVANIE  |  OPISANIE  |  DATA


2 часть ----------------
Фото 1     Описание для фото 1
Фото 2     Описание для фото 2
………………………………….
Фото N     Описание для фото N

Данные записываются в таблицу PHOTO
Таблица “PHOTO” для этой части выглядит так:
ID  |  FOTO  |  TEXT  |  ID_KAT (id с таблицы KAT)


Так вот как лучше получить (записать) ID_KAT? 
Получать последний auto_increment с таблицы PHOTO или записывать ID_KAT как дату с таблицы KAT.
 
PM MAIL   Вверх
skyboy
Дата 5.6.2006, 19:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

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



Не совсем понятно, что ты хочешь сделать. Хорошо, хоть структуру описал. А вообще-то, одна тема - один вопрос 
PM MAIL   Вверх
Serkys
Дата 5.6.2006, 22:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата(Igor_CH @  5.6.2006,  19:36 Найти цитируемый пост)
Получать последний auto_increment с таблицы PHOTO или записывать ID_KAT как дату с таблицы KAT.

Ни в коем случае! В перерывах между записью и вычерпыванием последнего авто_инкремента может быть добавлена ещё одна запись.
Вычерпывай, проставляя в where название, описание (желательно все сразу).
Код

mysql_query ("SELECT * FROM `KAT` WHERE `nazvanie` = '" . $nazvanie . "' AND `opisanie` = '" . $opisanie . "'");


З.Ы. Твои переменные выговаривать - пальцы сломаешь! smile  
PM MAIL   Вверх
skyboy
Дата 5.6.2006, 22:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

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



Serkys, может, мне показалось, но мне функия last_insert_id() возвращает автоинкремент вставленный именно мной(как сессией подключения). Может, показалось? 
PM MAIL   Вверх
Serkys
Дата 5.6.2006, 23:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



skyboy, без понятия. Я в дебри мускула не лазил. 
PM MAIL   Вверх
skyboy
Дата 5.6.2006, 23:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

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



Serkys, я тоже не лазил. Я испытания проводил. Только там лажа с этой функцией. От версии к версии она то работает стабильно, то вовсе не работает. По крайней мере, в моих руках... smile
Потому -  пользоваться ею нельзя.  
PM MAIL   Вверх
ASteel
Дата 6.6.2006, 08:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 24.5.2006
Где: Krasnodar, Russia

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



Цитата(Igor_CH @  5.6.2006,  18:36 Найти цитируемый пост)
Так вот как лучше получить (записать) ID_KAT? 
Получать последний auto_increment с таблицы PHOTO или записывать ID_KAT как дату с таблицы KAT.


Лучше всего, не использовать autoincrement а делать что-то типа:
Код

SELECT max(id)+1 AS `key` FROM some_table
-- сэмулировать такую штуку как sequence
-- под some_table в данном случае понимать KAT


И потом этот key использовать и в 1-ом запросе и во втором.
А last_insert_id() действительно крайне нестабильна.   

Это сообщение отредактировал(а) ASteel - 6.6.2006, 08:28
PM MAIL WWW   Вверх
Igor_CH
Дата 6.6.2006, 08:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



[QUOTE=Serkys,5.6.2006,  22:25]
Цитата(Igor_CH @  5.6.2006,  19:36 Найти цитируемый пост)

З.Ы. Твои переменные выговаривать - пальцы сломаешь! smile


Согласен, поменял названия.

Структура должна быть такой: я вношу данные:
Общее название   - в таблицу PHOTO_KAT 
Общее описание   - в таблицу PHOTO_KAT
Фото 1 - описание к фото 1  - в таблицу PHOTO
Фото 2 - описание к фото 2  - в таблицу PHOTO
...................
Фото N - описание к фото N  - в таблицу PHOTO

а потом уже буду делать выборку из двух таблиц.

вот такой код получился при записи данных:

Код

$sql_insert = "INSERT INTO photo_kat (name, text, data) VALUES  (".sql_quote($name).",".sql_quote($text).",".sql_quote($data).");";
$result = mysql_query($sql_insert,$con) or die (mysql_error()."<br>".$sql_insert);

$id_foto = mysql_insert_id();

$sql_insert = "INSERT INTO photo (foto_name, text, id_foto) VALUES  (".sql_quote($foto_name_1).",".sql_quote($text_1).", ".sql_quote($id_foto)."), (".sql_quote($foto_name_2).",".sql_quote($text_2).", ".sql_quote($id_foto).");";
$result = mysql_query($sql_insert,$con) or die (mysql_error()."<br>".$sql_insert);


Т.е. загружаю в первую таблицу "PHOTO_KAT" значения NAME, TEXT, DATA
Получаю auto_increment этой таблицы, и записываю его уже в следующую таблицу как id_foto.

Правильно ли сделал? Или все таки auto_increment не использовать?
 
PM MAIL   Вверх
skyboy
Дата 6.6.2006, 10:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

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



Igor_CH, тут - как в анеке: работает? тогда, ради Бога, ничего не трогай smile Так работает?
 smile  касательно last_insert_id() - у меня MySQL 5.0.x. Так вот, в пределах ХП эта функция ни разу не сбоила. А вот за пределами, просто 
в запросе, то работает, то возвращает "0". Я к тому, что не всё так плохо.
 
PM MAIL   Вверх
-=Ustas=-
Дата 7.6.2006, 08:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ustix IT Group
****


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

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



В твоем случае:
Код

$last_id = mysql_insert_id($con);

Ни разу не замечал сбоев. 


--------------------
В искаженном мире все догмы одинаково произвольны, включая догму о произвольности догм.
-----
PM WWW ICQ Skype   Вверх
Igor_CH
Дата 16.6.2006, 11:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



У меня тут вопрорс возник, а если будет сбой на сервере, например:
в первую таблицу данные занеслись 
сбой
во вторую ничего не попало

Как тут быть? 
PM MAIL   Вверх
-=Ustas=-
Дата 16.6.2006, 12:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ustix IT Group
****


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

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



Тогда уже mysql_insert_id не прокатит, так он работает только на текущей сессии. Вариант только так:
Код

SELECT MAX(`id`) FROM `table`
 


--------------------
В искаженном мире все догмы одинаково произвольны, включая догму о произвольности догм.
-----
PM WWW ICQ Skype   Вверх
Igor_CH
Дата 16.6.2006, 12:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



так, а как от сбоя предохраниться? 
Если произошел сбой - то запись не произошла. 
PM MAIL   Вверх
vasac
Дата 16.6.2006, 13:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Igor_CH, транзакциями предохраняться 
PM WWW   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Базы Данных | Следующая тема »


 




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


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

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