За последние 24 часа нас посетили 18744 программиста и 1702 робота. Сейчас ищут 848 программистов ...

Insert в несколько таблиц

Тема в разделе "PHP и базы данных", создана пользователем TigerZaka, 4 июн 2012.

  1. TigerZaka

    TigerZaka Активный пользователь

    С нами с:
    16 сен 2011
    Сообщения:
    189
    Симпатии:
    1
    Есть таблица товаров и таблица фотографий.
    Ну скажем: товары (id_tovar, name_tovar, id_photos) и фотографии (id_photo, photo_path).
    в id_photos по задумке должны храниться id'шники фотографий (как я понял, тип данных SET)

    Подскажите, если у меня есть форма добавления товара и в ней некоторое количество инпутов типа файл.
    То как грамотно делать insert в две таблицы, при том, что фоток может быть несколько.
    Пробовал с last_insert_id, но что-то беда (( направьте плз

    p.s.: и еще в таблице фото я правильно не храню id_tovar или все-таки нет?
     
  2. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
    id товара в таблице с фотографиями хранить нужно, иначе как ты узнаешь, к какому товару относится та или иная фотография?
    Сперва вставляешь запись в таблицу с товарами, потом с помощью mysql_insert_id() (если используешь mysql_* функции, для mysqli_* есть такая же) получаешь id добавленной записи, сохраняешь фотографии и вставляешь записи о них в таблицу с фотографиями, указав также id товара.
     
  3. TigerZaka

    TigerZaka Активный пользователь

    С нами с:
    16 сен 2011
    Сообщения:
    189
    Симпатии:
    1
    я решил сделать таблицы так: товары (id_tovar, name_tovar), фото (id_photo, photo_path, id_tovar)
    получилось взять insert_id при добавлении одной фотографии.
    Но не понятен принцип добавления нескольких фотографий. Либо когда просто несколько инпутов, либо, как на avito например.
    Т.е. мы добавляем фото, оно видимо сохраняется _> появляется сама картинка в форме, ..а мы можем добавить еще.

    Вопрос: что использовать надо? js, или хватит php и sql? Может нужно делать форму в форме (но вроде это не валидно)....?
     
  4. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    знаешь про транзакции?
     
  5. TigerZaka

    TigerZaka Активный пользователь

    С нами с:
    16 сен 2011
    Сообщения:
    189
    Симпатии:
    1
    нет. (..сейчас читаю, что это такое)
     
  6. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    если какой-то запрос не прошел, сможешь откатить все свои инсерты.
     
  7. TigerZaka

    TigerZaka Активный пользователь

    С нами с:
    16 сен 2011
    Сообщения:
    189
    Симпатии:
    1
    Код (Text):
    1. $query = "SET AUTOCOMMIT=0;
    2.         START TRANSACTION;
    3.         INSERT INTO tovar VALUES (NULL,
    4.     ".$_POST['id_tovar'].",
    5.     '".$_POST['name_tovar']."');
    6.  
    7.     SET @lastID := last_insert_id();
    8.     INSERT INTO photo VALUES (NULL,
    9.         '".$_POST['photo_path']."', @lastID);      
    10.         COMMIT";
    11.     if (mysql_query($query)) {....тра-тата.. }
    Я что-то не то делаю) , попробовал по примерам похожее, но выдает ошибку синтаксиса:
    You have an error in your SQL syntax; check the manual ....
    вобщем в пхпадмине работает, а здесь нет (

    Код (Text):
    1. INSERT INTO tovar VALUES (NULL, 'first');INSERT INTO photo VALUES (NULL, 'тарам-парам', last_insert_id())
    вобщем сделал так, вроде работает (правда пока без транзацкций):
    Код (Text):
    1. $query = "INSERT INTO tovar VALUES (NULL,
    2.     '".$_POST['id_tovar']."',
    3.     ".$_POST['name_tovar'].")";
    4.     $query2 = "INSERT INTO photo VALUES (NULL,
    5.         ' ".$_POST['photo_path']." ', last_insert_id())";
    6.     if (mysql_query($query) and mysql_query($query2)) {....тра-тата.. }