Witam serdecznie.

Mam sobie dwie tabele, które są ze sobą połączone relacyjnie:

  1. CREATE TABLE IF NOT EXISTS `userDetails` (
  2. `idUser` int(11) UNSIGNED NOT NULL DEFAULT '0',
  3. `city` char(100) NOT NULL DEFAULT '',
  4. `region` char(150) NOT NULL DEFAULT '',
  5. `phone` char(11) NOT NULL DEFAULT '',
  6. `workType` SET('f','m','h') NOT NULL DEFAULT 'f',
  7. `workRegion` enum('c','r','p','z') NOT NULL DEFAULT 'c',
  8. `category` SET('a','m','z','t','n','e','s') NOT NULL DEFAULT 'a',
  9. `photos` char(255) DEFAULT NULL,
  10. KEY `userDetailsFK` (`idUser`)
  11. ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
  12.  
  13. CREATE TABLE IF NOT EXISTS `users` (
  14. `idUser` int(11) UNSIGNED NOT NULL DEFAULT '0',
  15. `email` char(96) NOT NULL DEFAULT '',
  16. `name` char(25) NOT NULL DEFAULT '',
  17. `surname` char(40) NOT NULL DEFAULT '',
  18. `birthday` date NOT NULL DEFAULT '0000-00-00',
  19. `eyeColor` char(25) NOT NULL DEFAULT '',
  20. `hairColor` char(25) NOT NULL DEFAULT '',
  21. `height` smallint(3) UNSIGNED NOT NULL DEFAULT '0',
  22. `footSize` smallint(2) UNSIGNED NOT NULL DEFAULT '0',
  23. `bust` smallint(3) UNSIGNED NOT NULL DEFAULT '0',
  24. `middle` smallint(3) UNSIGNED NOT NULL DEFAULT '0',
  25. `loins` smallint(3) UNSIGNED NOT NULL DEFAULT '0',
  26. `addDate` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
  27. `status` enum('z','o','p') NOT NULL DEFAULT 'p',
  28. PRIMARY KEY (`idUser`)
  29. ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
  30.  
  31. ALTER TABLE `userDetails`
  32. 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:

  1. <?php
  2. if($_GET['todo'] == 1 && isset($_GET['id'])){
  3.     $dropData = "DELETE FROM users WHERE idUser = :id";
  4.     $stmt = $this->_dbh->prepare($dropData);
  5.     $stmt->bindParam(':id', $_GET['id'], PDO::PARAM_INT);
  6.     $aff += $stmt->execute();
  7. }
  8. ?>


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 ?