Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> foreign key constraint - wychwytywanie relacji przy usuwaniu
rafalp
post
Post #1





Grupa: Zarejestrowani
Postów: 224
Pomógł: 18
Dołączył: 4.02.2003
Skąd: Częstochowa

Ostrzeżenie: (0%)
-----


Witam,
Mam tabele z relacjami, no i przy usuwaniu klucza który jest powiązany w innej tabeli (przy RESTRICT) chce dostać jakiś ładny komunikat że najpierw należy usunąć rekord w nadrzędnej tabeli.

Normalnie przy usuwaniu dostajemy error "Cannot delete or update a parent row: a foreign key constraint fails"
Jak zrobić żeby nie pokazywać tego błędu, tylko przechwycić ten błąd?

Czy używać do tego try-catch? Czy można w inny sposób wymusić aby MySQL ładniej zwrócił jakis komunikat który nie zakończy działania skryptu.


--------------------
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 4)
nospor
post
Post #2





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




No ale używasz tego w jakimś kodzie php? To go pokaż.


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
rafalp
post
Post #3





Grupa: Zarejestrowani
Postów: 224
Pomógł: 18
Dołączył: 4.02.2003
Skąd: Częstochowa

Ostrzeżenie: (0%)
-----


  1. public function delete($id = null)
  2. {
  3. $model = Model::factory('Transport')->load($id);
  4. if(! $model->loaded())
  5. {
  6. message::error('błąd id');
  7. }
  8.  
  9. if($model->delete()) // tutaj wyrzuca "foreign key constraint fails"
  10. {
  11. message::success('deleted_success');
  12. }
  13. else
  14. {
  15. message::error('error_db');
  16. }
  17. }


Ten post edytował rafalp 8.08.2011, 17:23:28


--------------------
Go to the top of the page
+Quote Post
Smertius
post
Post #4





Grupa: Zarejestrowani
Postów: 156
Pomógł: 31
Dołączył: 23.02.2009
Skąd: Sanok

Ostrzeżenie: (0%)
-----


Jeśli korzystasz z PDO to można zastosować coś takiego:
  1. try {
  2. $obj->delete();
  3. } catch (\PDOException $e) {
  4. //1451 to kod błędu Cannot delete or update a parent row: a foreign key constraint fails (%s)
  5. //Który jest zwracany przez MySQL
  6. if ($e->errorInfo[1] == 1451) {
  7. $obj->deleteParentRow();
  8. } else {
  9. //Tutaj obsługa innych błędów
  10. }
  11. }
Go to the top of the page
+Quote Post
rafalp
post
Post #5





Grupa: Zarejestrowani
Postów: 224
Pomógł: 18
Dołączył: 4.02.2003
Skąd: Częstochowa

Ostrzeżenie: (0%)
-----


Dzięki, pracuję w Kohanie, zastosowałem Kohana_Database_Exception i jest OK smile.gif


--------------------
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 22.08.2025 - 10:04