Insert vrací FALSE i když data uloží
- 2bfree
- Člen | 248
Ahoj,
zkouším relativně triviální operaci s \Nette\Database a to založení uživatele s jeho kontaktním údajem a heslem do databázové struktury, ale když se pokusím vložit data, tak dostanu jako odpověď FALSE i když se data úspěšně vloží do DB.
Kód mám následující
$database = $this->getDatabase();
//$database->beginTransaction();
$salt = \Nette\Utils\Strings::random(10);
$user = $database->table('user')->insert(array(
'name' => $name,
'surname' => $surname,
));
$userContact = $database->table('user_contacts')->insert(array(
'user_id' => $user->id,
'user_contact_type_id' => 1,
'value' => $email,
));
$userCredential = $database->table('user_credentials')->insert(array(
'user_id' => $user->id,
'salt' => $salt,
'password' => $database::literal('SHA2(CONCAT(?, ?), 512)', $salt , $password),
));
var_dump($userCredential);
Struktura DB je následující
CREATE TABLE `user` (
`id` int(10) NOT NULL AUTO_INCREMENT,
`name` varchar(255) NOT NULL,
`surname` varchar(255) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
CREATE TABLE `user_contact_type` (
`id` int(10) NOT NULL AUTO_INCREMENT,
`name` varchar(255) NOT NULL,
`description` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
CREATE TABLE `user_contacts` (
`user_id` int(10) NOT NULL,
`user_contact_type_id` int(10) NOT NULL,
`value` varchar(255) NOT NULL,
PRIMARY KEY (`user_id`,`user_contact_type_id`),
KEY `user_id` (`user_id`),
KEY `user_contact_type_id` (`user_contact_type_id`),
CONSTRAINT `user_contacts_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`),
CONSTRAINT `user_contacts_ibfk_2` FOREIGN KEY (`user_contact_type_id`) REFERENCES `user_contact_type` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE `user_credentials` (
`user_id` int(10) NOT NULL,
`salt` varchar(255) NOT NULL,
`password` varchar(255) NOT NULL,
PRIMARY KEY (`user_id`),
KEY `user_id` (`user_id`),
CONSTRAINT `user_credentials_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Verze Nette 2.1.1 (2014–02–08)
- Tomáš Kolinger
- Člen | 136
Určitě dotaz proběhne v pořádku? Určitě vypisuje debug bar všechny dorazy jako úspěšně provedené?
Editoval Tomáš Kolinger (21. 2. 2014 21:39)
- David Matějka
- Moderator | 6445
mozna to bude souviset s tim, ze primary key neni AI, ale rovnou ho tam nastavujes, zkus si odkrokovat co se deje v insert metode, mozna to bude nejaky bug v NDBT
- David Matějka
- Moderator | 6445
tak potvrzuji, je to tim, ze tam neni AI – a muze za to primo PDO, ktery
pro ->lastInsertId
vrati 0, coz je trochu wtf :)
- David Matějka
- Moderator | 6445
reportoval jsem to, https://github.com/…/issues/1421. ted jen doufat, ze to hrach opravi :)
btw, jako hotfix by melo stacit pridat auto increment na ten pk, i kdyz ho nebudes pouzivat, pdo potom vrati spravnou hodnotu