Mam problem z pogranicza php i MySQL ale zdecydowałem się umieścić temat tutaj.
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 (IMG:
http://forum.php.pl/style_emoticons/default/sad.gif)
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 (IMG:
http://forum.php.pl/style_emoticons/default/exclamation.gif) !
A przecież zaburzenie unikalności klucza to kod błędu
1062 (jak się nie mylę).
Dlaczego tak się dzieje :?:
Dodatek:MySQL 4.1.7php 5.0.4Abstrakt bazodanowy to
Creole 1.0.9Framework
Mojavi 3.0.0 dev ( + moje zmiany ).