Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Запись новой строки в таблицу
 
 автор: RandomSOFT   (27.06.2006 в 19:49)   письмо автору
 
 

Если есть таблица table с одним из полей id (auto_increment ), как узнать, под каким id добавится новая строка в таблицу при запросе типа: INSERT INTO table VALUES (..........)
То есть, какмим будет следующий id?

   
 
 автор: Trianon   (27.06.2006 в 21:04)   письмо автору
 
   для: RandomSOFT   (27.06.2006 в 19:49)
 

LAST_INSERT_ID

mysql_insert_id();

   
 
 автор: RandomSOFT   (27.06.2006 в 21:30)   письмо автору
 
   для: Trianon   (27.06.2006 в 21:04)
 

Что-то я несовсем понял, как эти функции могут помочь....

   
 
 автор: RandomSOFT   (27.06.2006 в 21:33)   письмо автору
 
   для: Trianon   (27.06.2006 в 21:04)
 

По идее, если использовать SHOW TABLE STATUS, то в колонке 'Auto_increment' как раз и будет показано нужное значение, но проблема в том, что у меня несколько таблиц в одной БД и не получается вытащить это значение....

   
 
 автор: Trianon   (27.06.2006 в 21:37)   письмо автору
 
   для: RandomSOFT   (27.06.2006 в 21:33)
 

вызов mysql_insert_id(); после последней операции INSERT вернет Вам сгенерированный для добавленной строки строки номер.

Больше одной таблицы за один оператор INSERT Вы всё равно не затронете.

Номер будущей строки получить нельзя в принципе, т.к. запросы к серверу могут следовать параллельно.

   
 
 автор: RandomSOFT   (27.06.2006 в 21:40)   письмо автору
 
   для: Trianon   (27.06.2006 в 21:37)
 

это понятно, но разве эта функция не возвращает 0, если непосредственно перед ней не было запроса INSERT? мне надо узнать этот номер до самого запроса....

   
 
 автор: Trianon   (27.06.2006 в 21:43)   письмо автору
 
   для: RandomSOFT   (27.06.2006 в 21:40)
 

С целью?
Действительно, какой смысл узнавать номер,если достоверность его нельзя гарантировать?

   
 
 автор: RandomSOFT   (27.06.2006 в 21:42)   письмо автору
 
   для: Trianon   (27.06.2006 в 21:37)
 

почему нельзя? делайте запрос SHOW TABLE STATUS, посмотрите соответствующую строку....

   
 
 автор: Trianon   (27.06.2006 в 21:46)   письмо автору
 
   для: RandomSOFT   (27.06.2006 в 21:42)
 

потому что параллельно этому SHOW TABLE STATUS может прийти еще один INSERT
И ответ окажется устаревшим.
Это чисто справочный запрос.
Собственно, таким запросом его и можно узнать.
Только бессмысленно.

   
 
 автор: RandomSOFT   (27.06.2006 в 21:50)   письмо автору
 
   для: Trianon   (27.06.2006 в 21:46)
 

хорошо. Передо мной стоит такая задача: создать запись в таблице с двумя основными полями - id и file, где в file запишется имя файла, включающее в себя этот id....

   
 
 автор: Trianon   (27.06.2006 в 21:55)   письмо автору
 
   для: RandomSOFT   (27.06.2006 в 21:50)
 

только сегодня тема обсуждалась. Выполните UPDATE для свежевставленных строк.
http://www.softtime.ru/forum/read.php?id_forum=3&id_theme=19835

   
 
 автор: Trianon   (27.06.2006 в 21:57)   письмо автору
 
   для: Trianon   (27.06.2006 в 21:55)
 

Замечу, что в UPDATE можно сделать нечто более существенное, чем просто присвоить полю первичный ключ.

   
 
 автор: RandomSOFT   (27.06.2006 в 22:04)   письмо автору
 
   для: Trianon   (27.06.2006 в 21:57)
 

Кроме того для того чтобы сделать запрос нужно, чтобы файл был успешно загружен и переименован, а значит нужно знать имя файла еще до запроса.... это делается для того, чтобы не создавать строку, которой бы не соответствовал файл (если он будет незагружен....)

   
 
 автор: Trianon   (27.06.2006 в 22:05)   письмо автору
 
   для: RandomSOFT   (27.06.2006 в 22:04)
 

Вы не получите эту информацию до запроса.
Dixi.
PS
Неужели так трудно понять, что запросы на добавление файлов могут идти в параллель друг другу?
Вы хотите, чтоб у Вас все файлы перепутались?

   
 
 автор: RandomSOFT   (27.06.2006 в 22:09)   письмо автору
 
   для: Trianon   (27.06.2006 в 22:05)
 

неет, это я понимаю,просто говорю, что стоит найти какое-то другое решение, ибо это мне подходит не до конца.....

   
 
 автор: RandomSOFT   (27.06.2006 в 22:01)   письмо автору
 
   для: Trianon   (27.06.2006 в 21:55)
 

но мне-то нужно, чтоб он назывался $id.".exe" например..... т.е. не функция, конечный итог - из цифры получить строку....

   
 
 автор: Trianon   (27.06.2006 в 22:04)   письмо автору
 
   для: RandomSOFT   (27.06.2006 в 22:01)
 

И что?
UPDATE tab
SET filename = CONCAT(id, '.exe')
WHERE filename IS NULL

   
 
 автор: RandomSOFT   (27.06.2006 в 22:06)   письмо автору
 
   для: Trianon   (27.06.2006 в 22:04)
 

хм.... логично....

   
 
 автор: Trianon   (27.06.2006 в 22:12)   письмо автору
 
   для: RandomSOFT   (27.06.2006 в 22:06)
 

В Вашем случае этот изврат не нужен.
берете mysql_insert_id, в php вычисляете имя, переносите (move_uploaded_file) файл, и либо делаете UPDATE ... SET filename = $name либо DELETE в любом случае WHERE id = $id

   
 
 автор: RandomSOFT   (27.06.2006 в 22:21)   письмо автору
 
   для: Trianon   (27.06.2006 в 22:12)
 

В таком случае, наверно, действительно придется удалять строку при неудачной загрузке файла....

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования