добавление записи, получение указателя

moggucci

Guest
добавление записи, получение указателя

Проблема - есть главная таблица, первичный ключ - `id`, автоинкремент, в нее добавляю записи. При добавлении записи я не знаю, какой идентификатор ей присвоился! Для каждой добавленной записи хочу добавить запись в связанную таблицу, для этого мне нужно получить присвоенное БД значение ключевого поля `id`при вставке записи в главную таблицу. mysql_query и mysql_fetch_row не могут получить результат выполнения запроса на вставку записи. Не понимаю - вставка записи только возвращает результат "получилось/не получилось", но не передает указатель на запись? Что-то лыжи не едут :(
Показываю пример кода:

PHP:
// формируем запрос            
$query = "INSERT INTO `db`.`table`
  (`id`, `field1`, `field2')
  VALUES (NULL , '$value1', 'value2')";
// выполняем запрос
$p_res = mysql_query($query);
if($p_res)
{
  //вот здесь ошибка - неверный "результат" даем
  $cur_id = mysql_result($p_res, 0, `id`);
Подскажите :)
 

moggucci

Guest
Сейчас попробую. Значит ПРАВДА, указатель не возвращается?!

-~{}~ 31.05.07 01:17:

Внимание
mysql_insert_id() конвертирует возвращаемый функцией MySQL C API тип значения функции mysql_insert_id() в тип long int (называемый int в PHP). Если ваша колонка AUTO_INCREMENT имеет тип BIGINT, значение, возвращаемое функцией mysql_insert_id(), будет искажено. Вместо него используйте функцию SQL LAST_INSERT_ID().


У меня бигинт :(
Почитал про LAST_INSERT_ID() - это функция mysql - я не знаю как ее вызвать, плюс она тоже может дать неверный результат, если транзакция инсерта не закончилась (ничего не знаю про транзакции в mysql), если не хватило время на инсерт и прочее. И вообще бредом попахивает. По-человечески нельзя достучаться до ид записи? Почему блин проблемы на ровном месте...
Mr_Max, не воспринимайте на личный счет, вам спасибо за помощь. понимаю что ответ правильный для mysql, но мне не нравится такой программинг :(

-~{}~ 31.05.07 01:22:

Вот так похоже придется:
PHP:
<?
mysql_query("LOCK TABLES apc_forms WRITE");
mysql_query("SET AUTOCOMMIT = 0");
mysql_query("INSERT INTO apc_forms (form_title, form_event_id, form_expirey) VALUES ('title',1,'2005-10-10')");
define('ID',mysql_query("SELECT LAST_INSERT_ID()"));
mysql_query("COMMIT");
mysql_query("UNLOCK TABLES");
?>
Охиреть.
 

Mr_Max

Первый класс. Зимние каникулы ^_^
Команда форума
SELECT LAST_INSERT_ID();
 

ForJest

- свежая кровь
Старики как-то рассказывали, что в молодсти они поставили в качестве типа для колонки первичного ключа простой INT. И что за всю их долгую (а надо сказать они занимались программированием ещё в незапамятные времена) жизнь колонка так и не переполнилась...
 

Mr_Max

Первый класс. Зимние каникулы ^_^
Команда форума
ForJest
Ну видать мало человеку 4,3 Милиарда строк.
 

moggucci

Guest
Поставлю инт :) Пральна говорите. И не буду городить лишнее...
 
Сверху