Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Базы Данных > не работает запрос MySQL


Автор: begin 18.5.2007, 10:59
Мне нужно брать номер последней вставленной записи в таблице t_avd , чтобы использовать его для вставки в другую таблицу.
Запрос выглядит так (нашел на этом форуме):
Код

$query="select * from t_adv order by id_adv desc limit 1";
$result=mysql_query($query, $db) or die(mysql_error());
$res=mysql_fetch_array($result);
$opt=$rez['id_adv'];

Так вот вместо последнего номера вставляется ноль! Если пишу после:
Код

$opt=$rez['id_adv'];
строку:
echo $opt;

то ничего не выводит.
Тип поля id_adv в таблице t_adv и в той таблице куда я его пытаюсь вставить, SMALLINT.
Никаких сообщений об ошибке не выводится.
Подскажите, где ошибка?

Автор: BuShaRt 18.5.2007, 11:12
mysql_insert_id --  Возвращает ID, сгенерированный при последнем INSERT-запросе. 

Автор: Kesh 18.5.2007, 11:25
Попробуй
Код

$opt=$rez["id_adv"];

Автор: BuShaRt 18.5.2007, 11:42
Kesh, 
Абсолютно идентичные записи, причем вариант begin валидней...
К тому же, что тут пробывать, если решение задачи изначально не верно...

Добавлено через 4 минуты и 31 секунду
И раз уж если рассматривать задачу, то лучше запускать цикл, даже если в массиве предполагаеть один элимент...
Хотя бы для читабильности кода, я уж молчу, что это поможет при откладке и т.п.
Код

while ($val = mysql_fetch_array($result)){
    print $val['id_adv'];
}

Автор: mishaSL 18.5.2007, 13:49
begin, покажите структуру таблички.

Автор: begin 22.5.2007, 20:29
Цитата(BuShaRt @ 18.5.2007,  11:12)
mysql_insert_id --  Возвращает ID, сгенерированный при последнем INSERT-запросе.

Вот это:
Код

while ($val = mysql_fetch_array($result)){
    print $val['id_adv'];
}

снова ничего не вывело!
Насчет:
Код

mysql_insert_id

расскажите, как именно использовать в пхп - я не знаю синтаксис.
А вот структура таблицы t_adv:
Код

id_adv    SMALLINT key autoincrement
text    TEXT
name    SHAR (50)
coment    SMALLINT
pos    SMALLINT
alb    TEXT
photo    TEXT
count    SMALLINT
last    DATE

В скрипте я сначала вставляю в эту таблицу новую запись:
Код

$query="insert into t_adv (id_adv, text, name, coment, pos, alb, photo, count, last) values (NULL, '$text', '$nameadv', '0', '$pos', '$album', '$photo', '0', '07.05.20')";
$result=mysql_query($query, $db) or die(mysql_error());

(причем все вставляется правильно!)
А потом мне нужен id_adv только что вставленной записи.
Результат я уже описал выше  smile 

Автор: xolod 22.5.2007, 21:27
Цитата(begin @  22.5.2007,  20:29 Найти цитируемый пост)
использовать в пхп - я не знаю синтаксис

"Еще вчера", "специально для вас" был открыт сайт  http://ru2.php.net/manual/ru/index.php.

Код

SELECT LAST_INSERT_ID() FROM `t_adv`

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

Цитата(BuShaRt @  18.5.2007,  11:12 Найти цитируемый пост)
mysql_insert_id

Бяка, фу, не кошерно, моветон и c BigInt может не работать.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)