Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> mysql_insert_id возвращает 0 
V
    Опции темы
gvozd
Дата 9.2.2008, 09:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Здравствуйте! Столкнулся с проблемой, которую не могу решить в одиночку. Есть следующая функция:
Код

function add_new_product($code, $name, $price, $status, $guarantee){
    db_query("INSERT INTO `product`(name, catalog_id) VALUES('".db_input($name)."', '".$this->product_catalog_id."')", "db_link");
    $p_id = mysql_insert_id("db_link");
    if($p_id == 0) {
        fwrite(fopen('ee', 'w'), "INSERT INTO `product`(name, catalog_id) VALUES('".db_input($name)."', '".$this->product_catalog_id."')");
    }
    db_query("INSERT INTO `provider_product`(
    product_id,
    provider_id,
    catalog_id,
    product_name,
    code,
    price, guarantee, status, date_add)
    VALUES(
    '".$p_id."',
    '".$this->id."',
    '".$this->catalog_id."',
    '".db_input($name)."',
    '".db_input($code)."',
    '".$price."', '".$guarantee."', '".$status."', '".date('Y-m-d', time() + TIME_ZONE)."')", "db_link");
    $pp_id = mysql_insert_id("db_link");
    $this->check_product_id .= $pp_id.',';
}


После выполнения первого запроса, mysql_insert_id возвращает 0, текст запроса: "INSERT INTO `product`(name, catalog_id) VALUES('Alcatel S853 Black', '1')".  В базу строка добавляется с автоинкрементируемым id = 364637. Почему так может происходить?
PM MAIL ICQ   Вверх
vasac
Дата 9.2.2008, 11:38 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1060
Регистрация: 4.5.2006

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



Я не знаю что такое db_query() и почему вы передаете в mysql_insert_id строку.
PM WWW   Вверх
gta4kv
Дата 9.2.2008, 11:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Walking around mad.
***


Профиль
Группа: Завсегдатай
Сообщений: 1868
Регистрация: 25.7.2006

Репутация: 4
Всего: 91



а и в db_query, вы тоже передаете строку. а дб_квери это наверно собственная функция. и очень может быть что не рабочая.
PM MAIL   Вверх
gvozd
Дата 9.2.2008, 14:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Код

function db_query($query, $link = 'db_link') {
global $$link, $logger;
    $result = mysql_query($query, $$link) or db_error($query, mysql_errno(), mysql_error());
    return $result;
}

function db_connect($server = DB_SERVER, $username = DB_SERVER_USERNAME, $password = DB_SERVER_PASSWORD, $database = DB_DATABASE, $link = 'db_link') {
    global $$link;
    if (USE_PCONNECT == 'true') {
        $$link = mysql_pconnect($server, $username, $password);
    } else {
        $$link = mysql_connect($server, $username, $password);
    }
    if ($$link) mysql_select_db($database); {
            db_query("SET CHARSET cp1251", $link);
        return $$link;
    }
}


Это обертки для работы с БД. В mysql_insert_id передаю указатель сессии, т.к. мне приходится работать с двумя БД.
PM MAIL ICQ   Вверх
gvozd
Дата 9.2.2008, 15:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



gta4kv, спасибо за помощь! Работает функция:
Код

function db_last_id($link = 'db_link') {
global $$link, $logger;
   $result = mysql_insert_id($$link);
   return $result;
}

PM MAIL ICQ   Вверх
FractalizeR
Дата 9.2.2008, 16:01 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 273
Регистрация: 27.12.2007
Где: Россия/Москва

Репутация: 2
Всего: 4



Не думаю, что имеет смысл делать вот это
Код

return $$link;


Почему бы из db_connect не вернуть просто ресурс подключения? Кроме того, зачем вам в одном скрипте несколько раз подключаться к серверу DB? Поменять текущую базу данных или сделать выборку данных из другой базы без ее смены (mysql_select_db) можно сделать и так.

А если уж приспичило, то не проще ли ссылку на переменную передать (&), в которую нужно вернуть идентификатор подключения?

Это сообщение отредактировал(а) FractalizeR - 9.2.2008, 16:12


--------------------
Чтобы поблагодарить или наоборот поругать участника форума лучше пользоваться значками "+" и "-", изменяющими репутацию. Они находятся слева от поста под именем пользователя.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Базы Данных | Следующая тема »


 




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


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

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