Русскоязычный форум, посвященный фреймворку Kohana
http://forum.kohanaframework.su/

Database_Exception [ 1062 ]: Duplicate entry '239178805' for
http://forum.kohanaframework.su/viewtopic.php?f=33&t=577
Страница 1 из 1

Автор:  JSergRu [ 19 фев 2013, 10:49 ]
Заголовок сообщения:  Database_Exception [ 1062 ]: Duplicate entry '239178805' for

Как видно из заголовка сообщения, получаю ошибку при попытке добавить запись в таблицу со значением первичного ключа, которое уже есть в бд. Загружать сервер лишним запросом "найти запись с ключем = N" перед добавлением не хочется, так как это происходит в цикле и очень часто буду пытаться добавить такую запись.
Попробовал перехват ошибок
Код:
                try {
                    $Item->save();
                } catch (ORM_Validation_Exception $e) {
                    $errors = $e->errors();
                    var_dump($errors);die();
                }

но сообщение "Database_Exception [ 1062 ]: Duplicate entry '239178805' for key 'PRIMARY' [ INSERT INTO 'table' ..." все-равно вылезает, пробовал переключить в режим PRODUCTION - не помогло.
Подскажите, пожалуйста, в какую сторону копать, чтобы решить проблему.

Автор:  butschster [ 19 фев 2013, 11:16 ]
Заголовок сообщения:  Re: Database_Exception [ 1062 ]: Duplicate entry '239178805'

Не совсем понятно. Т.е. вы загрузили запись из бд, отредактировали ее и пытаетесь сделать UPDATE, но вместо этого ORM пытается сделать ее как INSERT? Соответсвенно ORM считает, что запись не загружена из БД, т.к. либо указан не верный первичный ключ либо чего то еще.

Автор:  JSergRu [ 20 фев 2013, 00:02 ]
Заголовок сообщения:  Re: Database_Exception [ 1062 ]: Duplicate entry '239178805'

Не, из базы ничего не загружаю, в базу загружаю.
Есть XML с объектами в количестве 3000, который парсить надо примерно раз в час и свойства каждого объекта сохранять в БД. У каждого объекта есть свой уникальный ID. Если MySQL-база пустая проблем не возникает, но при повторном парсинге (проверка на наличние новых записей) и возникает такая ошибка. Впринципе, я всетаки добавил условие: если есть в БД запись с ID, то не добавляем (т. к. это все-таки правильнее будет), но тем не менее решение исходного вопроса интересно.
Т. е. при попытке добавить запись с ID, который уже есть в БД вылезает эта ошибка.

Автор:  butschster [ 20 фев 2013, 13:28 ]
Заголовок сообщения:  Re: Database_Exception [ 1062 ]: Duplicate entry '239178805'

Обычно записи, которые есть в БД обновляют.

У вас ID - это первичный ключ, он всегда уникальный, соответсвенно, когда вы добавляете в БД запись с таким же ключом, БД выдает ошибку, это логично! И не знаю почему это вызывает недоумение, возможно стоит изучить работу с БД

Автор:  JSergRu [ 20 фев 2013, 14:35 ]
Заголовок сообщения:  Re: Database_Exception [ 1062 ]: Duplicate entry '239178805'

Задам вопрос по-другому: перехват ошибок не работает, почему?
или как в переменную записать результат запроса? (без вывода ошибки)

Автор:  rain2 [ 20 фев 2013, 19:11 ]
Заголовок сообщения:  Re: Database_Exception [ 1062 ]: Duplicate entry '239178805'

выложите участок кода полностью. и структуру базы данных

Автор:  JSergRu [ 21 фев 2013, 04:45 ]
Заголовок сообщения:  Re: Database_Exception [ 1062 ]: Duplicate entry '239178805'

...\application\classes\Controller\Test.php
Код:
<?php defined('SYSPATH') or die('No direct script access.');
 
class Controller_Test extends Controller {
 
    public function action_index()
    {
        $test = ORM::factory('test');
        $test->id = '1';


        try {
            $test->save();
        } catch (ORM_Validation_Exception $e) {
            $errors = $e->errors();
            var_dump($errors);die();
        }
    }
 
}

...\application\classes\Model\Test.php
Код:
<?php defined('SYSPATH') or die('No direct script access.');
 
class Model_Test extends ORM {
}

База
Код:
SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
CREATE TABLE IF NOT EXISTS `tests` (
  `id` int(1) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `tests` (`id`) VALUES
(1);

Браузер: .../test
Цитата:
Database_Exception [ 1062 ]: Duplicate entry '1' for key 'PRIMARY' [ INSERT INTO `tests` (`id`) VALUES ('1') ]
MODPATH\database\classes\Kohana\Database\MySQL.php [ 194 ]
189 {
190 // This benchmark is worthless
191 Profiler::delete($benchmark);
192 }
193
194 throw new Database_Exception(':error [ :query ]',
195 array(':error' => mysql_error($this->_connection), ':query' => $sql),
196 mysql_errno($this->_connection));
197 }
198
199 if (isset($benchmark))


MODPATH\database\classes\Kohana\Database\Query.php [ 251 ] » Kohana_Database_MySQL->query(arguments)
MODPATH\orm\classes\Kohana\ORM.php [ 1321 ] » Kohana_Database_Query->execute(arguments)
MODPATH\orm\classes\Kohana\ORM.php [ 1418 ] » Kohana_ORM->create(arguments)
APPPATH\classes\Controller\Test.php [ 9 ] » Kohana_ORM->save()
SYSPATH\classes\Kohana\Controller.php [ 84 ] » Controller_Test->action_index()
{PHP internal call} » Kohana_Controller->execute()
SYSPATH\classes\Kohana\Request\Client\Internal.php [ 97 ] » ReflectionMethod->invoke(arguments)
SYSPATH\classes\Kohana\Request\Client.php [ 114 ] » Kohana_Request_Client_Internal->execute_request(arguments)
SYSPATH\classes\Kohana\Request.php [ 990 ] » Kohana_Request_Client->execute(arguments)
DOCROOT\index.php [ 118 ] » Kohana_Request->execute()

Фреймворк: Kohana 3.3.0

Автор:  butschster [ 21 фев 2013, 17:07 ]
Заголовок сообщения:  Re: Database_Exception [ 1062 ]: Duplicate entry '239178805'

Если у вас ошибка возникает
Код:
Database_Exception
, почему вы тогда пишете:

Код:
try {
            $test->save();
} catch (ORM_Validation_Exception $e) {
            $errors = $e->errors();
            var_dump($errors);die();
}


а не

Код:
try {
            $test->save();
} catch (Database_Exception $e) {
}


Может стоит все таки читать?

Автор:  JSergRu [ 22 фев 2013, 00:14 ]
Заголовок сообщения:  Re: Database_Exception [ 1062 ]: Duplicate entry '239178805'

Спасибочки большое! ))

Страница 1 из 1 Часовой пояс: UTC + 4 часа [ Летнее время ]
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/