Модераторы: korob2001, ginnie
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> получения ID из таблицы... 
:(
    Опции темы
Shadex
Дата 4.4.2006, 08:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 23.5.2005

Репутация: нет
Всего: 1



Код

$dbh = DBI->connect("DBI:mysql:$database:$hostname", $user, $password);
$statement = "INSERT INTO files (name_file) VALUES ('123')";
$sth = $dbh -> prepare($statement);
$rv = $sth -> execute;
$new_id = $sth -> {insertid};
$rc = $sth -> finish;
$rc = $dbh->disconnect;

вот запрос инсерт в таблицу files, ID_files у которой AUTO_INCREMENT
тогда почему $new_id = $sth -> {insertid}; - ничего не возвращает? может я что-то неправильно делаю?
PM MAIL   Вверх
Ivan Kolesnikov
Дата 4.4.2006, 08:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 113
Регистрация: 9.3.2005
Где: г. Новокузнецк

Репутация: 3
Всего: 6



Насколько я знаю, при изменении (добавлении, удалении) данных не возвращается что именно изменилось, вовращается только количество измененных полей.
А чтобы получить ID нужно найти его SELECTом.
Код

$dbh = DBI->connect("DBI:mysql:$database:$hostname", $user, $password);
$dbh->do("INSERT INTO files (name_file) VALUES ('123')");
$sth = $dbh->prepare("SELECT ID_FILES FROM files WHERE name_file='123'");
$sth->execute();
$new_id = $sth->fetchrow_hashref()->{ID_FILES};
$rc = $sth -> finish;
$rc = $dbh->disconnect;

--------------------
PM MAIL ICQ   Вверх
sharq
Дата 4.4.2006, 09:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Perl Liker
**


Профиль
Группа: Участник
Сообщений: 841
Регистрация: 13.12.2004
Где: Ростов-на-Дону

Репутация: 23
Всего: 28



Ivan Kolesnikov,
Цитата(Ivan Kolesnikov @ 4.4.2006, 09:32 Найти цитируемый пост)
Насколько я знаю, при изменении (добавлении, удалении) данных не возвращается что именно изменилось, вовращается только количество измененных полей.

Верно, возращается значение $sth->rows.

Чтобы вернуть вставленный id можно обойтись без дополнительного запроса.
Например, в MySQL следует вызвать метод
Код

$h->{'mysql_insertid'};

По этому поводу следует почитать perldoc DBD:smileиспользуемый_драйвер).

У DBI есть стандартный метод last_insert_id, смотри perldoc DBI.

smile



--------------------
[color=gray]There's More Than One Way To Do It[/color]
PM MAIL WWW ICQ Skype   Вверх
Shadex
Дата 4.4.2006, 13:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 23.5.2005

Репутация: нет
Всего: 1



вы конечно правы! но я делал по мануалу! почитайте! там написано что в DBI можно получить значение поля, которое изменялось ИНКРЕМЕНТОМ... а получается оно так:
Код

$new_id = $sth -> {insertid};

можно еще так:
Код

$dbh->{'mysql_insertid'};
но это уже новый запрос!
Ешё у меня новая проблема:
почему в одном скрипте CGI - работает соединение с базой и все такое... то есть могу работать с базой... а как только вставляю кусок этого скрипта в другой файл с рабочим скриптом - этот скрипт перстает работать! есть какие то условия ипользования DBI ???
PM MAIL   Вверх
Shadex
Дата 4.4.2006, 13:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 23.5.2005

Репутация: нет
Всего: 1



всем спасибо я уже разобрался со второй проблемой! почему то use strict; - все портило! может кто-нибудь знает почему? и как этот модуль проверяет ошибки? (ведь он нужен для отслеживания ошибок если я не ошибаюсь? ) может мой код обойтись без него?
PM MAIL   Вверх
sharq
Дата 4.4.2006, 14:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Perl Liker
**


Профиль
Группа: Участник
Сообщений: 841
Регистрация: 13.12.2004
Где: Ростов-на-Дону

Репутация: 23
Всего: 28



Shadex,
Цитата(Shadex @ 4.4.2006, 14:30 Найти цитируемый пост)
вы конечно правы! но я делал по мануалу! почитайте! там написано что в DBI можно получить значение поля, которое изменялось ИНКРЕМЕНТОМ... а получается оно так:
$new_id = $sth -> {insertid};

Интерсно, где ты это нашел, можешь привести отрывок! Как я понял ты читал, perldoc DBD::mysql
Но там вот что написано:
Цитата

Historic Features
...
_InsertID
    The method

        $dbh->func('_InsertID');

    used to be equivalent with

        $dbh->{'mysql_insertid'};

Statement handle attributes
...
    insertid
        Replaced with $sth->{'mysql_insertid'}.
...


Надеюсь, понял о чем я smile

Цитата(Shadex @ 4.4.2006, 14:57 Найти цитируемый пост)
почему то use strict; - все портило! может кто-нибудь знает почему? и как этот модуль проверяет ошибки? (ведь он нужен для отслеживания ошибок если я не ошибаюсь? ) может мой код обойтись без него?

smile
strict -не может ничего портить, оно накладывает ограничения, почитай perldoc strict .
И я тебе советую везде использовать эту прагму!

smile


--------------------
[color=gray]There's More Than One Way To Do It[/color]
PM MAIL WWW ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl"
korob2001
sharq
  • В этом разделе обсуждаются общие вопросы по языку Perl
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1045 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.