Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] mysqli i tresc ostatniego zapytania
Forum PHP.pl > Forum > PHP
hhg
czy da sie jakos w uzyciu mysqli zwrocic SQL ostatniego zapytania?
raport bledow z serwera mysql malo mi mowi (Wyrwany z kontekstu) a ja chcialbym zobaczyc cale zapytania z podstawionymi zmiennymi

z gory dzieki za pomoc
sf
się zapisuje wszystkie zapytania, które wykonujesz... potem się przechwytuje błędy php.. ( http://pl2.php.net/manual/pl/function.rest...ror-handler.php ) i sobie implementujesz obsługę tego błędu, właśnie tutaj dajesz by wyświetlił ostatnie zapytanie winksmiley.jpg najlepiej to oczywiście opakować w klasy winksmiley.jpg
hhg
zgadza sie tylko to:
"dajesz by wyświetlił ostatnie zapytanie"
ja nie wiem jak wyglada to zapytanie po przetworzeniu przez PHP, np.

"SELECT * FROM " . $tabela

nie wiem jak wyglada to zapytanie po podstawieniu $tabela, oczywiscie echo mnie nie interesuje bo to ma mi raportowac na e-mail a nie wypisywac klientowi na ekran winksmiley.jpg
oczywiscie to byl mega banalny przyklad bo w rzeczywistosci mam mase takich konkatenacji

Twoj pomysl jest calkiem OK tylko chodzi mi o samo przechwycenie ostatniego wykonanego SQL-a w danym rządaniu do serwera

obsluge bledow juz mam

$db->query() or die.....
DawidF
skoro chcesz, aby każde zapytanie, jakie wysłano do bazy wysyłać Ci mailem, to osobiście zrobiłbym w ten sposób

  1. <?php
  2. $q = "SELECT * FROM " . $tabela;
  3. // potem
  4. @mail($q // itd. - manual powinien tutaj pomóc
  5.  
  6. // ... i dopiero wykonałbym
  7. $db->query() or die.....
  8. ?>


tylko, czy jest sens, aby każde zapytanie skierowane do bazy wysyłać sobie na mail?
hhg
ale ja mam takich zapytan w aplikacji ponad 100, teraz edycja bezkonfliktowa kazdego z nich zajelaby mi pare dni :|
licze bardziej na cos w stylu
$db->last_query()

bo wtedy wrzucam to w obsluge bledow i wysyla mi automatycznie ostatnie wykonane zapytanie
Inzabi
to sobie napisz funkcje $db->last_query(), zapisuj do zmiennej globalnej klasy ostatnie zapytanie.
  1. <?php
  2. class db{
  3.  
  4. var $query;
  5.  
  6. function query($q){
  7.  
  8.  $this->query=$q;
  9.  ...
  10. }
  11.  
  12.  
  13. function last_query(){
  14.  
  15. return $query;
  16. }
  17.  
  18. }
  19. ?>
em1X
no właśnie.. zrób sobie otoczkę na bazę danych. Ja na przykład zawsze korzystam z tego samego:

tylko php5
  1. <?php
  2.  
  3. class MySQL
  4. {
  5. /**
  6. @handle Referencja do polaczenia mysql
  7. **/
  8. private $handle;
  9.  
  10. /**
  11. Resource List
  12. Lista wszystkich wywolanych zapytan sql typu select
  13. w celu ich zwolnienia.
  14. **/
  15. private $reslist;
  16.  
  17. /**
  18. Lista wszystkich wykonanych zapytan
  19. **/
  20. private $qrylist;
  21.  
  22. /**
  23. Singleton
  24. **/
  25. private static $instance;
  26.  
  27. /**
  28. Destruktor zwalniajacy z pamieci wszelkie
  29. zapytania select, ktore zostaly wykonane.
  30. (GarbageCollector)
  31. **/
  32. public function __destruct()
  33. {
  34. for ($i=0; $i<count($this->reslist); $i++)
  35. @mysql_free_result($this->reslist[$i]);
  36. }
  37.  
  38. /**
  39. Metoda zwraca, a wczesniej tworzy
  40. w miare potrzeby egzemplarz samej siebie
  41. **/
  42. public static function getInstance()
  43. {
  44. if (empty(self::$instance))
  45. {
  46. $class = __CLASS__;
  47. self::$instance = new $class;
  48.  
  49. self::$instance->handle = @mysql_pconnect('skrzat.home.pl');
  50. @mysql_select_db('skrzat');
  51.  
  52. // ustawiamy polskie znaki
  53. self::$instance->query('SET CHARSET latin2');
  54. self::$instance->query("SET lc_time_names = 'pl_PL'");
  55. }
  56.  
  57. return (mysql_errno() === 0) ? self::$instance : null;
  58. }
  59.  
  60. /**
  61. * Czy wystąpił błąd przy ostatnim zapytaniu?
  62. */
  63. public function errorOccured()
  64. {
  65.  return (mysql_errno($this->handle) > 0);
  66. }
  67.  
  68. /**
  69. Wywoluje zapytanie
  70. do bazy danych.
  71. **/
  72. public function & query($str)
  73. {
  74. $this->addQuery($str);
  75. $qry = @mysql_query($str);
  76.  
  77. if (substr($str, 0, 6) == "select")
  78. $this->reslist[] =& $qry;
  79.  
  80. return $qry;
  81. }
  82.  
  83. /**
  84. Dodaje zapytanie do listy
  85. */
  86. private function addQuery($query)
  87. {
  88.  $arr =& $this->getQueryList();
  89. $arr[] = $query;
  90. }
  91.  
  92. /**
  93. Lista wszystkich wykonanych zapytan
  94. **/
  95. public function & getQueryList()
  96. {
  97. return $this->qrylist;
  98. }
  99.  
  100. /**
  101. Ostatnie zapytanie do bazy
  102. */
  103. public function getLastQuery()
  104. {
  105.  $arr =& $this->getQueryList();
  106. return $arr[count($arr)-1];
  107. }
  108.  
  109. }
  110.  
  111. ?>


co daje:
  1. <?php
  2. $db = MySQL::getInstance();
  3. $db->query('select * from table');
  4.  
  5. print $db->getLastQuery();
  6. ?>
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.