Forum Webscript.Ru

Общие => Базы данных => Тема начата: Pr0Head от 28 Марта 2002, 13:24:23

Название: Как узнать значения поля для новой записи?
Отправлено: Pr0Head от 28 Марта 2002, 13:24:23
Доброго времени суток!

У меня есть форма. После того, как нажали на кнопку Sybmit,  данные из формы записываются в Мускуль (с уникальным, автоподставляемым id) и формируется страница с заполненными данные. На этой странице создается ссылка, при нажатии на которую, открывается форма для редактирования данных. То есть создается ссылка, типа <а href=>.

А как мне получить номер id? То есть, мне нужно сделать запрос на запись в Мускуль и узнать какой id присвоен именно ЭТОЙ записи. Можно конечно посчитать все кол-во записей в БД и присвоить номер последней, но это ИМХО не очень хорошо, т.к. будет дополнительная нагрузка на БД, и может получится так, что кто-то в это время добавит еще одну запись и тогда номер id может неправильно "посчитаться".

Хэлп! :)
Название: Как узнать значения поля для новой записи?
Отправлено: fidget от 28 Марта 2002, 13:40:40
last_insert_id()
только вот для того, что бы не было путаницы кто, что вставил и каком порядке, таблицу лочить надо...
Название: Как узнать значения поля для новой записи?
Отправлено: Chs от 28 Марта 2002, 15:26:00
Цитировать
last_insert_id()
только вот для того, что бы не было путаницы кто, что вставил и каком порядке, таблицу лочить надо...

Не обязательно лочить, наверное, поскольку last_insert_id поддерживается на уровне соединения.
И очень сомнительно, что в пределах одного скрипта записи добавляются вперемежку.:)
Название: Как узнать значения поля для новой записи?
Отправлено: Pr0Head от 28 Марта 2002, 16:24:55
Спасибо fidget и Chs.

Только я никак не пойму как этим пользоваться. Не получется что-то. Делал так:

$sql = "INSERT INTO .......................";
$result = mysql_query($sql);
$sql = "LAST_INSERT_ID()";
$used_id = mysql_query($sql);

и так:

$sql = "INSERT INTO .......................";
$result = mysql_query($sql);
$used_id = mysql_query("LAST_INSERT_ID()");


а потом пытаюсь вставить на страницу:
">Edit

но ссылка получается пустая. =(

Прочитал ман, на сайте мускуль.ком, но толком ничего не понял.
Название: Как узнать значения поля для новой записи?
Отправлено: fidget от 28 Марта 2002, 16:31:52
$sql="SELECT last_insert_id()"
Название: Как узнать значения поля для новой записи?
Отправлено: Pr0Head от 28 Марта 2002, 17:05:12
Это называется в трех соснах заблудился.

$sql = "INSERT INTO .......................";
$result = mysql_query($sql);

$sql = "SELECT last_insert_id()";
$used_id = mysql_query($sql);

echo $used_id;

На экран выводится надпись: Resource id # 2
Это не похоже на номер id :)

Да что же я делаю не так? Уже час с этим долбаюсь. :mad:
Название: Как узнать значения поля для новой записи?
Отправлено: Fury от 28 Марта 2002, 17:48:51
Используй функцию mysql_insert_id().
Она возвратит последний сгененированный автоинкрементным полем id
Название: Как узнать значения поля для новой записи?
Отправлено: Chs от 28 Марта 2002, 18:04:53
Цитировать
Используй функцию mysql_insert_id().
Она возвратит последний сгененированный автоинкрементным полем id

LAST_INSERT_ID() возвращает то же самое. :)
Название: Как узнать значения поля для новой записи?
Отправлено: Pr0Head от 28 Марта 2002, 18:50:05
Ужас! Вообщем все заработало.

Спасибо откликнувшимся. ;)

В итоге заработало так:

$sql = "INSERT INTO .......................";
$result = mysql_query($sql);
$used_id = mysql_insert_id ($db);

// Где $db = это коннект к БД.
Название: Спасибо за активное и многогранное обсуждение
Отправлено: от 29 Марта 2002, 12:14:30
Только что сам столкнулся с подобной проблемой.
В вашем обсуждении нашел ответ на мой вопрос.
Кстати, LAST_INSERT_ID() тоже возвращает последний id, если присвоить алиас.
Вот мой код:
--------------------------
    $sql = "INSERT INTO ....";
    mysql_query($sql);

    $sql="SELECT last_insert_id() as user_id";
    $result=mysql_query($sql);
    $row = mysql_fetch_array($result);
    echo $row["user_id"];
--------------------------