Proc $database->getInsertId() nefunguje po $database->table($tblname)->insert($data)?
- chaky
- Člen | 22
Pri debugovani sve aplikace jsem zjistil, ze mi metoda $database->getInsertId() vraci hodnotu 0.
$database->table(self::TABLE_NAME)->insert($data);
$id = $database->getInsertId(); // vrati 0
Pokud vsak pouziju metodu $database->query(), tak po INSERT obdrzim skutecne insertId.
$database->query("INSERT INTO " . self::TABLE_NAME . " ?", $data);
$id = $database->getInsertId(); // vrati skutecne insertId
Jaky je duvod takoveho chovani? Je snad ten prvni insert pres table() nejakym zpusobem zavrzenihodny?
- chaky
- Člen | 22
Tabulka ma primarni klic, ktery je zaroven auto_increment.
Aha, jasne – ActiveRow to samozrejme vraci, takze insertId muzu take ziskat pres $row[self::COLUMN_ID] … Nicmene porad mi prijde divne, proc se mi z getInsertId() vraci 0.
CREATE TABLE `outbox` (
`UpdatedInDB` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`InsertIntoDB` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
`SendingDateTime` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
`SendBefore` time NOT NULL DEFAULT '23:59:59',
`SendAfter` time NOT NULL DEFAULT '00:00:00',
`Text` text,
`DestinationNumber` varchar(20) NOT NULL DEFAULT '',
`Coding` enum('Default_No_Compression','Unicode_No_Compression','8bit','Default_Compression','Unicode_Compression') NOT NULL DEFAULT 'Default_No_Compression',
`UDH` text,
`Class` int(11) DEFAULT '-1',
`TextDecoded` text NOT NULL,
`ID` int(10) unsigned NOT NULL AUTO_INCREMENT,
`MultiPart` enum('false','true') DEFAULT 'false',
`RelativeValidity` int(11) DEFAULT '-1',
`SenderID` varchar(255) DEFAULT NULL,
`SendingTimeOut` timestamp NULL DEFAULT '0000-00-00 00:00:00',
`DeliveryReport` enum('default','yes','no') DEFAULT 'default',
`CreatorID` text NOT NULL,
PRIMARY KEY (`ID`),
KEY `outbox_date` (`SendingDateTime`,`SendingTimeOut`),
KEY `outbox_sender` (`SenderID`)
) ENGINE=MyISAM AUTO_INCREMENT=46 DEFAULT CHARSET=utf8;
- h4kuna
- Backer | 740
Je to tím, jak se po insertu zavolá znova statement pro select posledního záznamu tak se tato informace ztratí.
Jinými slovy pro NDT je následující konstrukce po insertu nepoužitelná.
$id = $database->getInsertId();
A mám takový pocit že jsem to snad ani nikdy nepotřeboval.
K id se dostaneš takto:
$row = $database->table(self::TABLE_NAME)->insert($data);
$row->id
Editoval h4kuna (23. 1. 2018 7:52)