Русскоязычный форум, посвященный фреймворку Kohana

Все о фреймворке Kohana. Обсуждение уроков, документации.
Текущее время: 28 мар 2024, 21:28

Часовой пояс: UTC + 4 часа [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 9 ] 
Автор Сообщение
 Заголовок сообщения: Database_Exception [ 1062 ]: Duplicate entry '239178805' for
СообщениеДобавлено: 19 фев 2013, 10:49 
Не в сети
Зеленый

Зарегистрирован: 15 фев 2013, 07:52
Сообщения: 6
Как видно из заголовка сообщения, получаю ошибку при попытке добавить запись в таблицу со значением первичного ключа, которое уже есть в бд. Загружать сервер лишним запросом "найти запись с ключем = 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 - не помогло.
Подскажите, пожалуйста, в какую сторону копать, чтобы решить проблему.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Database_Exception [ 1062 ]: Duplicate entry '239178805'
СообщениеДобавлено: 19 фев 2013, 11:16 
Не в сети
Новичок

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Database_Exception [ 1062 ]: Duplicate entry '239178805'
СообщениеДобавлено: 20 фев 2013, 00:02 
Не в сети
Зеленый

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Database_Exception [ 1062 ]: Duplicate entry '239178805'
СообщениеДобавлено: 20 фев 2013, 13:28 
Не в сети
Новичок

Зарегистрирован: 14 фев 2013, 23:26
Сообщения: 19
Обычно записи, которые есть в БД обновляют.

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Database_Exception [ 1062 ]: Duplicate entry '239178805'
СообщениеДобавлено: 20 фев 2013, 14:35 
Не в сети
Зеленый

Зарегистрирован: 15 фев 2013, 07:52
Сообщения: 6
Задам вопрос по-другому: перехват ошибок не работает, почему?
или как в переменную записать результат запроса? (без вывода ошибки)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Database_Exception [ 1062 ]: Duplicate entry '239178805'
СообщениеДобавлено: 20 фев 2013, 19:11 
Не в сети
Бывалый

Зарегистрирован: 09 авг 2012, 13:17
Сообщения: 43
выложите участок кода полностью. и структуру базы данных


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Database_Exception [ 1062 ]: Duplicate entry '239178805'
СообщениеДобавлено: 21 фев 2013, 04:45 
Не в сети
Зеленый

Зарегистрирован: 15 фев 2013, 07:52
Сообщения: 6
...\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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Database_Exception [ 1062 ]: Duplicate entry '239178805'
СообщениеДобавлено: 21 фев 2013, 17:07 
Не в сети
Новичок

Зарегистрирован: 14 фев 2013, 23:26
Сообщения: 19
Если у вас ошибка возникает
Код:
Database_Exception
, почему вы тогда пишете:

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


а не

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


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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Database_Exception [ 1062 ]: Duplicate entry '239178805'
СообщениеДобавлено: 22 фев 2013, 00:14 
Не в сети
Зеленый

Зарегистрирован: 15 фев 2013, 07:52
Сообщения: 6
Спасибочки большое! ))


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 9 ] 

Часовой пояс: UTC + 4 часа [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 9


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Все о фреймворке Kohana  | 
Powered by phpBB® Forum Software © phpBB Group