Mam sobie dwie tabele, które są ze sobą połączone relacyjnie:
CREATE TABLE IF NOT EXISTS `userDetails` ( `idUser` int(11) UNSIGNED NOT NULL DEFAULT '0', `city` char(100) NOT NULL DEFAULT '', `region` char(150) NOT NULL DEFAULT '', `phone` char(11) NOT NULL DEFAULT '', `workType` SET('f','m','h') NOT NULL DEFAULT 'f', `workRegion` enum('c','r','p','z') NOT NULL DEFAULT 'c', `category` SET('a','m','z','t','n','e','s') NOT NULL DEFAULT 'a', `photos` char(255) DEFAULT NULL, KEY `userDetailsFK` (`idUser`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; CREATE TABLE IF NOT EXISTS `users` ( `idUser` int(11) UNSIGNED NOT NULL DEFAULT '0', `email` char(96) NOT NULL DEFAULT '', `name` char(25) NOT NULL DEFAULT '', `surname` char(40) NOT NULL DEFAULT '', `birthday` date NOT NULL DEFAULT '0000-00-00', `eyeColor` char(25) NOT NULL DEFAULT '', `hairColor` char(25) NOT NULL DEFAULT '', `height` smallint(3) UNSIGNED NOT NULL DEFAULT '0', `footSize` smallint(2) UNSIGNED NOT NULL DEFAULT '0', `bust` smallint(3) UNSIGNED NOT NULL DEFAULT '0', `middle` smallint(3) UNSIGNED NOT NULL DEFAULT '0', `loins` smallint(3) UNSIGNED NOT NULL DEFAULT '0', `addDate` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', `status` enum('z','o','p') NOT NULL DEFAULT 'p', PRIMARY KEY (`idUser`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; ALTER TABLE `userDetails` ADD CONSTRAINT `userDetails_ibfk_1` FOREIGN KEY (`idUser`) REFERENCES `users` (`idUser`) ON DELETE CASCADE ON UPDATE CASCADE;
i mój problem polega na tym iż nie mogę za pomocą PHP (dokładnie PDO) wykonać nic poza SELECT'em tzn. nie mogę wykonać DELETE, UPDATE itp.
Jeśli robię coś takiego:
<?php $dropData = "DELETE FROM users WHERE idUser = :id"; $stmt = $this->_dbh->prepare($dropData); $stmt->bindParam(':id', $_GET['id'], PDO::PARAM_INT); $aff += $stmt->execute(); } ?>
to taka akcja się wykonuje ale tylko wtedy kiedy jest spełniony warunek (czyli istnieją GET'y) i nie wykonuje się w bazie tylko na stronie.
Kiedy kasuje GET'y to wszystko powraca tak jak było przed wykonaniem zapytania.
Domyślam się że problem tkwi w ON DELETE CASCADE ON UPDATE CASCADE; ale nie jestem pewien - testowałem bez łączenia relatywnego i wtedy elegancko zapytania sie wykonują, a jak jest ta relacja to juz nie.
Ma ktoś może na to rozwiązanie ?