За последние 24 часа нас посетили 16780 программистов и 1646 роботов. Сейчас ищут 888 программистов ...

Один запрос, добавить в БД и получить в ответ то,что добавил

Тема в разделе "PHP для новичков", создана пользователем VLK, 23 фев 2014.

  1. VLK

    VLK Старожил

    С нами с:
    15 дек 2013
    Сообщения:
    3.010
    Симпатии:
    58
    Подскажите, можно ли как-нибудь организовать такой запрос, я добавляю в БД запись, а в ответ получаю, то, что добавил, мне это надо что бы получить ID записи (он в БД автоматически устанавливается).
     
  2. YSandro

    YSandro Старожил

    С нами с:
    7 апр 2011
    Сообщения:
    2.523
    Симпатии:
    2
    Re: Один запрос, добавить в БД и получить в ответ то,что доб

    SHOW TABLE STATUS LIKE $table В результате по ключу 'Auto_increment' будет последний (следующий) id.
    Только не используй mysql_insert_id(), т.к. эта функция выдаёт последний вставленный id базы, а не таблицы.
    Одним запросом тоже не выйдет, т.к. результатом может быть ошибка вставки данных. Или, может, функцию можно написать..
     
  3. VLK

    VLK Старожил

    С нами с:
    15 дек 2013
    Сообщения:
    3.010
    Симпатии:
    58
    Re: Один запрос, добавить в БД и получить в ответ то,что доб

    Спасибо за информацию и насчет написания пользовательской функции тоже.
     
  4. VLK

    VLK Старожил

    С нами с:
    15 дек 2013
    Сообщения:
    3.010
    Симпатии:
    58
    Re: Один запрос, добавить в БД и получить в ответ то,что доб

    А насчет этой функции - mysql_insert_id() если я выполняю запрос и тут же получаю ID при помощи этой функции т.е. вот так вот:

    Код (Text):
    1. query($query);
    2.  $id = $db->insert_id;
    есть шанс что если кто то делает что то подобное, что то добавляет в БД что спутается полученный id и я получу не то, что должен
     
  5. YSandro

    YSandro Старожил

    С нами с:
    7 апр 2011
    Сообщения:
    2.523
    Симпатии:
    2
    Re: Один запрос, добавить в БД и получить в ответ то,что доб

    Не знаю, что у тебя в $db, и как реализовано получение id.
    По идее, чтобы быть уверенным, что берём последний id, нужно заблокировать базу на время подключения и запросов скрипта.
    Сейчас полез в поиск, попалась статья на хабре Блокировки в MySQL, вроде, толковая, сам читаю.


    В официальных доках про mysql_insert_id есть
     
  6. smitt

    smitt Старожил

    С нами с:
    3 янв 2012
    Сообщения:
    3.166
    Симпатии:
    65
    Re: Один запрос, добавить в БД и получить в ответ то,что доб

    А почему не поместить в транзакцию?
    Все будет выполняться в рамках 1 транзакции.
     
  7. VLK

    VLK Старожил

    С нами с:
    15 дек 2013
    Сообщения:
    3.010
    Симпатии:
    58
    Re: Один запрос, добавить в БД и получить в ответ то,что доб

    А можно в виде кода показать как это
     
  8. smitt

    smitt Старожил

    С нами с:
    3 янв 2012
    Сообщения:
    3.166
    Симпатии:
    65
  9. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    11.131
    Симпатии:
    1.250
    Адрес:
    там-сям
    Re: Один запрос, добавить в БД и получить в ответ то,что доб

    mysql_insert_id() безопасен
    http://stackoverflow.com/a/5069847/272885
    Другие пользователи, вставляющие свои записи, гарантированно НЕ получат то же значение, что и ты. Не знаю поможет ли это тебе, но знай — автоинкремент не зависит от транзакции. В некоторых случаях ты можешь просрать запись (транзакция будет откачена). Но в любом случае, то значение, что ты прочитал через mysql_insert_id(), не будет выдано никому больше. Не будет случайных связей.
     
  10. VLK

    VLK Старожил

    С нами с:
    15 дек 2013
    Сообщения:
    3.010
    Симпатии:
    58
    Re: Один запрос, добавить в БД и получить в ответ то,что доб

    artoodetoo, спасибо, очень поможет, а точнее, просто не надо будет составлять и отправлять еще один запрос.