Активная запись в CodeIgniter увеличивается больше, чем должна - PullRequest
0 голосов
/ 11 марта 2011

Я опубликовал это на форумах CodeIgniter на днях и не получил ответа, поэтому я пытаюсь здесь.Похоже, что по какой-то причине мое значение автоинкремента в моей таблице увеличивается на 2 вместо 1 после того, как я выполню оператор удаления, а затем оператор вставки.

Вот синтаксис создания для моей таблицы.

CREATE TABLE `brokerage_zip_range` (
     `id` int(11) NOT NULL auto_increment,
     `zip_code` varchar(10) NOT NULL,
     `brokerage_id` int(11) NOT NULL,
     PRIMARY KEY  (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=latin1 

У меня есть код, который выглядит следующим образом в модели:

public function assign_zip_range($brokerage_id, $zip_code) {
     $this->db->where('brokerage_id',$brokerage_id);
     $this->db->delete('brokerage_zip_range');

     $this->db->set('brokerage_id', $brokerage_id);
     $this->db->set('zip_code', $zip_code);
     $this->db->insert('brokerage_zip_range'); 
} 

(Обратите внимание, что по причинам, по которым я здесь не буду, я не могу просто сделать этооператор обновления).

Проблема, с которой я столкнулся, заключается в том, что хотя этот код выполняется нормально, вставленная запись увеличивается более чем на единицу.Таким образом, до выполнения этого кода запись может выглядеть следующим образом:

id    zip_code brokerage_id
7     95202     2

После того, как я запустил код (скажем, с почтовым индексом 92222), теперь он выглядит так:

id    zip_code brokerage_id
9     92222     2 

Следующее значение автоинкремента должно быть 8, а не 9.

Я делаю что-то не так или это CI?Я укажу, что я пытался запустить этот код сам по себе в CI, то есть никаких других операций вообще не происходит ни до, ни после него.Если это имеет значение (и я сомневаюсь, что это так), я использую CI 2.0 / MySQL 5.01 / PHP 5.3.

ОБНОВЛЕНИЕ!Я НАШЕЛ ОТВЕТ Итак, в итоге получается, что используемый мной класс MY_Router (так что я мог иметь более одного уровня контроллеров, не прибегая к ручной маршрутизации), по-видимому, вызывал все дважды.Я заметил это, когда пошел и работал над совершенно другим разделом кода и увидел, что он вставляет две записи с одинаковыми данными вместо одной.Я удалил этот класс, и теперь все снова хорошо.

Спасибо всем за помощь.

Ответы [ 3 ]

1 голос
/ 17 декабря 2011

Для тех, у кого есть Flash-контент:

Я обнаружил, что Flash Player заставляет мою страницу сделать второй запрос.В моем случае это была загрузка видео.Решением моей проблемы было поместить флеш-вставку в отдельный html-файл и загрузить этот html-файл в iframe в представлении с нарушением.

1 голос
/ 11 марта 2011

Я действительно очень сомневаюсь, что это делает КИ.Попробуйте вывести SQL, сгенерированный CI AR, следующим образом:

$this->db->last_query();

, чтобы вы могли видеть, какой SQL он выполняет в вашей базе данных.

0 голосов
/ 11 марта 2011

Непосредственно не ответьте на ваш вопрос. Но попробуйте профилирование вашего приложения, добавив:

$this->output->enable_profiler(TRUE);

на вашем __construct()

и посмотрите, действительно ли это только один вызов INSERT.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...