|
|
|
|
|
для: Евгений Петров
(09.09.2005 в 21:17)
| | Ну да не изменится... так и не нужно чтобы это значение изменялось, так как оно предназначено для организации связи между таблицами, т.е. если вы вставили значение с AUTO_INCREMENT вы можете его узнать для того, чтобы поместить это значение в качестве вторичного ключа в другую таблицу. Если значение будет "плыть" никакой связи не получится. Так ведь больше и надобности нет - число записей всегда можно узнать при помощи функции count() - ей и следует пользоваться и ничем другим, а новые значения AUTO_INCREMENT - это внутреннее дело базы данных. | |
|
|
|
|
|
|
|
для: Евгений Петров
(09.09.2005 в 21:17)
| | Более того, last_insert_id относится не просто к текущему скрипту, но и к текущему запросу. То есть если выполнить еще какой-то запрос после добавления записи, то last_insert_id уже не вернет значение (читал об этом - сам не пробовал:) | |
|
|
|
|
|
|
|
для: cheops
(09.09.2005 в 19:59)
| | Ну вот например вставляется запись в таблицу а потом где то извлекается значение mysql_insert_id(). Так вот если в промежутке времени между запросом и вызовом mysql_insert_id() кто нибудь занесет в б.д. еще одно значение, то изменится ли id или нет. Я лично думаю что нет, т.к. опытным путем проверил, что id возвращается именно тот который был сгенерирован последним запросом а ТЕКУЩЕМ скрипте, а не вообще запросом к б.д. | |
|
|
|
|
|
|
|
для: Евгений Петров
(09.09.2005 в 16:54)
| | Хм... А в смысле не успеет? | |
|
|
|
|
|
|
|
для: cheops
(09.09.2005 в 01:30)
| | Т.е. если кто то успеет добавить что нибудь в БД то last_insert_id будет другим? | |
|
|
|
|
|
|
|
для: Настя
(08.09.2005 в 23:41)
| | Не очень понятно в чём проблема last_insert_id () - возвращает счётчик таблицы, операция вставки атомарна, поэтому никаких сбоев не должно быть, если значение last_insert_id используется после, то следует прибегать либо к блокировке таблицы при помощи LOCK TABLES, либо к транзакциям. К сожалению, транзакции в MyISAM не доступны и необходимо использовать InnoDB, которая в несколько раз медленнее таблицы MyISAM. | |
|
|
|
|
|
|
|
для: Евгений Петров
(09.09.2005 в 00:16)
| | Хотя нет все правильно ч только что проверил.
Запустил скрипт:
<?
mysql_query("INSERT INTO tbl(text) VALUES('Строка')");
sleep(10);
echo mysql_insert_id();
?>
|
И за те 10 секунд которые скрипт спит занес в таблицу ещё одну запись и сркипт выдал мне именно тот id который был сгенерирован именно этим скриптом. Т.е. все должно работать проблема (если она есть) не в этом. | |
|
|
|
|
автор: Настя (09.09.2005 в 00:22) |
|
|
для: Евгений Петров
(09.09.2005 в 00:16)
| | Потому что в моем случае без разницы, что max(), что last_id()
Считай, я его использую, после того, как загружаю строку в таблицу fanfics, чтобы получить $ficid | |
|
|
|
|
|
|
|
для: Настя
(08.09.2005 в 23:41)
| | В том коде что ты привела last_insert_id() нигде не вызывается. Где она используется? | |
|
|
|
|
автор: Настя (08.09.2005 в 23:41) |
|
|
для: Евгений Петров
(08.09.2005 в 23:15)
| | >Вообще фиг его знает, я прочитал мануал по MySQL так там
>вроде написано, что данные сохраняются на сервере т.е.
>last_insert_id() возвращает id последнего запроса к таблице
>вообще. Хотя если это так, то я тогда не понимаю смысл этой
>функции. Толку с неё...
Действительно?..
Может, кто-то еще знает? Ау? Просто если эта функция относится к таблице, а не к пользователю, то моя проблема остается - то, что пользователь может пролучить чужой id (тот, котрый уже прошел следом за его). | |
|
|
|
|