Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> try - catch i kontunuowanie
blawat
post
Post #1





Grupa: Zarejestrowani
Postów: 31
Pomógł: 1
Dołączył: 17.03.2006

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


kod:

  1. try {
  2. $db->insert('tab1', $data1);
  3. $db->insert('tab2', $data2);
  4. $db->insert('tab3', $data3);
  5. $db->insert('tab4', $data4);
  6. $db->insert('tab5', $data5);
  7. ...
  8. ...
  9. } catch (dbException $exc) {
  10. echo $exc->getMessage();
  11. }


zalozenia: odczytuje dane z jednej gigantycznej tabeli i po jakims tam parsowaniu zapisuje je do powiedzmy 100 innych tabeli, kazda insert moze rzucic wyjatek, przy czym chcialbym aby zostala wyswietlona tylko informacje ze dane zapytanie nie przeszlo i caly kod byl kontynuowany dalej...

klu sprawy: chce uniknac pakowania kazdego inserta w osobny try - catch (IMG:style_emoticons/default/smile.gif) da rade? jakos tak ze rzuci bledem cath go wylapie i w magiczny sposob wroci kontynuowac dalej...?
Go to the top of the page
+Quote Post
Mephistofeles
post
Post #2





Grupa: Zarejestrowani
Postów: 1 182
Pomógł: 115
Dołączył: 4.03.2009
Skąd: Myszków

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


Użyj exception handler.
Go to the top of the page
+Quote Post
blawat
post
Post #3





Grupa: Zarejestrowani
Postów: 31
Pomógł: 1
Dołączył: 17.03.2006

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


To nie zalatwi sprawy:

set_exception_handler

Sets the default exception handler if an exception is not caught within a try/catch block. Execution will stop after the exception_handler is called.
Go to the top of the page
+Quote Post
Crozin
post
Post #4





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


Dlaczego nie chcesz każdego zapytania objąć blokiem try/catch?
Go to the top of the page
+Quote Post
d3ut3r
post
Post #5





Grupa: Zarejestrowani
Postów: 709
Pomógł: 176
Dołączył: 24.10.2010

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


Idąc za manualem:

  1. <?php
  2. function inverse($x) {
  3. if (!$x) {
  4. throw new Exception('Division by zero.');
  5. }
  6. else return 1/$x;
  7. }
  8.  
  9. try {
  10. echo inverse(5) . "\n";
  11. echo inverse(0) . "\n";
  12. } catch (Exception $e) {
  13. echo 'Caught exception: ', $e->getMessage(), "\n";
  14. }
  15.  
  16. // Continue execution
  17. echo 'Hello World';
  18. ?>


skrypt wyświetli HelloWorld, więc to chyba dokładnie to o co Ci chodzi ?
Go to the top of the page
+Quote Post
blawat
post
Post #6





Grupa: Zarejestrowani
Postów: 31
Pomógł: 1
Dołączył: 17.03.2006

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


Cytat(Crozin @ 15.11.2010, 20:34:19 ) *
Dlaczego nie chcesz każdego zapytania objąć blokiem try/catch?


ze zwyklego lenistwa (IMG:style_emoticons/default/tongue.gif) wiem ze obejcie kazdego inserta zalatwi temat ale chcialem jakos tak "prosciej"
Go to the top of the page
+Quote Post
-=Peter=-
post
Post #7





Grupa: Zarejestrowani
Postów: 304
Pomógł: 51
Dołączył: 4.02.2005
Skąd: Kraków

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


Wsadź sobie zapytania i parametry do dwuwymiarowej tablicy i zrób to w pętli, przykładowo:

  1. $queries = arrray(
  2. array('query' => 'INSERT INTO tab VALUES(?, ?, ?)', 'params' => array(...)),
  3. );
  4.  
  5. foreach($quieres as $queryData){
  6. try{
  7. $db->insert($queryData['query'], $queryData['params']);
  8. }catch(Exception $e){
  9. echo 'Błąd egzekucji zapytania "'.$queryData['query'].'"';
  10. }
  11. }
Go to the top of the page
+Quote Post
d3ut3r
post
Post #8





Grupa: Zarejestrowani
Postów: 709
Pomógł: 176
Dołączył: 24.10.2010

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


A nie prościej zmodyfikować metodę insert, tak aby w przypadku błędu od razu wyrzucała w wiadomości w jakim zapytaniu wystąpił błąd ? Wtedy możesz użyć jednego try ... catch
Go to the top of the page
+Quote Post
Zyx
post
Post #9





Grupa: Zarejestrowani
Postów: 952
Pomógł: 154
Dołączył: 20.01.2007
Skąd: /dev/oracle

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


Magicznym sposobem, o który pytasz, jest właśnie opakowywanie każdego z zapytań blokiem try...catch. A jak nie chcesz mieć mnóstwa kodu, opakuj to sobie w jakąś funkcję, metodę czy co tam masz i po kłopocie:

  1. function insertExt($db, $foo, $bar)
  2. {
  3. try
  4. {
  5. $db->insert($foo, $bar);
  6. }
  7. catch(Exception $e)
  8. {
  9. ...
  10. }
  11. } // end insertExt();
  12.  
  13. insertExt($db, 'item1', 'tralala');
  14. insertExt($db, 'item2', 'tralala');
  15. insertExt($db, 'item3', 'tralala');
Go to the top of the page
+Quote Post
erix
post
Post #10





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




A nie przypadkiem chodzi o to?

http://pl2.php.net/manual/en/pdo.error-handling.php
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 26.09.2025 - 15:13