Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> jak sprawdzić, czy był błąd, w pg_send_query()
DeyV
post
Post #1





Grupa: Zarząd
Postów: 2 277
Pomógł: 6
Dołączył: 27.12.2002
Skąd: Wołów/Wrocław




Mam zamiar przygotować ładny sposób wykonywania i kontrolowania zapytań postgres. Skoro korzysta się z PHP5, pasowałoby bowiem wykorzystywać Exeptions i pare innych mechanizmow, ktore się wraz z 5 dostaje.

Okazało się jednak, że bardzo szybko natrafiłem na problem, ktorego nie umiem w mądry sposób rozwiazać.

Chodzi o kody błędów, zwracane tylko przez funkcję pg_result_error_field" title="Zobacz w manualu PHP" target="_manual ()

Aby jednak móc z niej korzystać, konieczne jest otrzymanie resource z wynikiem zapytania, a takiego, w przypadku błędu w zapytaniu, funkcja pg_query" title="Zobacz w manualu PHP" target="_manual () nie zwraca (zamiast tego dając FALSE).

Zamiast niej manual online poleca pg_send_query" title="Zobacz w manualu PHP" target="_manual () (która zawsze zwraca true) a potem wyciągnąć resource przy pomocy pg_get_result" title="Zobacz w manualu PHP" target="_manual ()

No i OK - pg_get_result zawsze zwraca resource, teraz jednak jak mam sprawdzić, czy zapytanie się wykonało? Trochę dziwne wydaje mi się każdorazowe wyciąganie od bazy kodu błędu ( pg_result_error_field" title="Zobacz w manualu PHP" target="_manual () ) i sprawdzanie, czy jakiś błąd się pojawił.
Ale innego sposobu narazie nie udało mi się znaleść. Może w wiecie?


przykład w działaniu: (PHP5, pg8 )
  1. <?php
  2.  
  3. $bQuerySend = pg_send_query( $this->rConection, 'INSERT INTO NieIstniejacaTablea (name) values (test)' );
  4.  
  5. var_dum( $bQuerySend );
  6.  
  7. $rResult = pg_get_result( $this->rConection );
  8. var_dum( $rResult );
  9. $w = pg_result_error_field( $rResult, PGSQL_DIAG_SQLSTATE ). ' '. pg_result_error( $rResult );
  10. var_dum( $w );
  11.  
  12. ?>
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
DeyV
post
Post #2





Grupa: Zarząd
Postów: 2 277
Pomógł: 6
Dołączył: 27.12.2002
Skąd: Wołów/Wrocław




W poscie podałem, że nie jest to możliwe, ponieważ nie można wtedy wyciągnąć kodu błędu, gdyż ... zamiast resource otrzymaliśmy FALSE.

A kod błędu jest niezbędny, by móc rozpoznać np. dlaczego dany rekord się nie dodał (brak jakiegoś zewnętrznego klucza, lub ograniczenie zewnętrzne)

W każdym razie dzięki.
Go to the top of the page
+Quote Post

Posty w temacie


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: 11.10.2025 - 23:46