Zaczne od kodu:
AddQuestionAction.class.php
<?php // ... public function execute() { // Pobranie obiektów z kontekstu $objController = $this->getContext()->getController(); $objRequest = $this->getContext()->getRequest(); // --- // Pobranie modeli $objModel = $objController->getModel( 'FAQ', 'AddQuestion' ); // --- try { $objModel->addQuestion(); } catch( SQLException $objException ) { // Jakieś tam operacje return View::ERROR; } return View::SUCCESS; } // ... ?>
AddQuestionModel.class.php
<?php // ... public function addQuestion() { // Pobranie modeli $objModel = $this->objController->getGlobalModel( 'FAQ' ); // --- // Pobranie parametrów żądania $strSectionName = $this->objRequest->getParameter( 'name' ); $intLanguageId = $this->objRequest->getParameter( 'languageId' ); $strQuestion = $this->objRequest->getParameter( 'question' ); $strAnswer = $this->objRequest->getParameter( 'answer' ); // --- // Pobranie danych z modeli $intMaxCurrentPosition = $objModel->getLastPosition( $intLanguageId ); // --- $objStatment = $this->objConnection->prepareStatement( 'INSERT INTO faq SET languageId = ?, position = ?, question = ?, answer = ?' ); $intLanguageId, ( $intMaxCurrentPosition + 1 ), $strQuestion, $strAnswer ); $intAffectedRows = $objStatment->executeUpdate( $arrParams ); if( $intAffectedRows > 0 ) { return true; } return false; } // .... ?>
Jak widać powyżej - banalna operacja. W Akcji pobieram model i wykonuje jego metodę. Szafa gra, a przynajmniej powinna

Podam dodatkowo strukturę tabeli faq:
CREATE TABLE `faq` ( `id` int(10) NOT NULL AUTO_INCREMENT, `languageId` int(2) NOT NULL DEFAULT '0', `position` int(10) NOT NULL DEFAULT '1', `question` varchar(255) NOT NULL DEFAULT '', `answer` text NOT NULL, PRIMARY KEY (`id`), UNIQUE KEY `question` (`languageId`,`question`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
I teraz problem. Na pola languageId + question jest założony klucz unikalny. Co powinno zaowocowac wyrzuconym wyjątkiem podczas próby dodania tych samych danych.
I owszem wyjątek leci, ale ...
... z kodem błędu 0

A przecież zaburzenie unikalności klucza to kod błędu 1062 (jak się nie mylę).
Dlaczego tak się dzieje :?:
Dodatek:
MySQL 4.1.7
php 5.0.4
Abstrakt bazodanowy to Creole 1.0.9
Framework Mojavi 3.0.0 dev ( + moje zmiany ).