Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Wyciszanie funkcji a własna klasa
Forum PHP.pl > Forum > Przedszkole
Evinek
Witam.
Tworzę własną klasę do obsługi MySQL. Zrobiłem np. przy połączeniu connect() or $this->error();, ale przy złym hoscie wywala błąd dzięki funkcji plus dodatkowo własne.
Wygląda to tak:
Kod
Warning: mysql_connect() [function.mysql-connect]: php_network_getaddresses: getaddrinfo failed: Nieznany host. in F:\xampp\htdocs\inc\class.mysql.php on line 18

Warning: mysql_connect() [function.mysql-connect]: [2002] php_network_getaddresses: getaddrinfo failed: Nieznany host. (trying to connect via tcp://localhostt:3306) in F:\xampp\htdocs\inc\class.mysql.php on line 18

Warning: mysql_connect() [function.mysql-connect]: php_network_getaddresses: getaddrinfo failed: Nieznany host. in F:\xampp\htdocs\inc\class.mysql.php on line 18
2002: php_network_getaddresses: getaddrinfo failed: Nieznany host.


A chciałbym aby wywalało tylko moje błędy (dzięki errno() i error()) - czyli ostatnia tylko linijka.

Więc czy opłaca się wyciszać te funkcje? zauważyłem iż w MyBB tak robią, lecz dużo jest negatywnych ocen na ich skrypt - że jest zrobiony słabo.

Co wy o tym powiecie?

Pozdrawiam Paweł.
gothye
albo napisz własny error_handler albo umieść funckję error() w die()
wNogachSpisz
Ta Twoja klasa będzie robić coś pożytecznego, czy tylko potencjalnie popsuje (a na pewno spowolni) program?
Skoro już decydujesz się na wprowadzenie abstrakcji przed funkcje PHP do obsługi bazy, to może spowodujesz przy tej okazji wzrost funkcjonalności?
Jeśli tak to polecam patent ActiveRecord, masz go wbudowanego w CodeIgnitera i CakePHP.
Evinek
Póki co mam taki kod:
  1. class mysql{
  2.  
  3. private $connected;
  4.  
  5. public function __construct($host, $name, $pass, $db){
  6. $this->connected = $this->connect($host, $name, $pass);
  7. if($this->connected){
  8. $this->select_db($db) or $this->error();
  9. }
  10. else{
  11. $this->error();
  12. }
  13. }
  14.  
  15. public function connect($host, $name, $pass){
  16. return mysql_connect($host, $name, $pass);
  17. }
  18.  
  19. public function select_db($db){
  20. return mysql_select_db($db);
  21. }
  22.  
  23. public function query($query){
  24. return mysql_query($query) or $this->error($query);
  25. }
  26.  
  27. public function fetch_array($query){
  28. $array = mysql_fetch_assoc($query);
  29. return $array;
  30. }
  31.  
  32. public function num_fields($result){
  33. return mysql_num_fields($result);
  34. }
  35.  
  36. public function escape_string($string){
  37. if(function_exists("mysql_real_escape_string") && $this->connected)
  38. {
  39. $string = mysql_real_escape_string($string, $this->connected);
  40. }
  41. else
  42. {
  43. $string = addslashes($string);
  44. }
  45. return $string;
  46. }
  47.  
  48. public function free_result($result){
  49. return mysql_free_result($result);
  50. }
  51.  
  52. public function error($string = ''){
  53. if(empty($string)){
  54. echo mysql_errno().": ".mysql_error()."\n";
  55. }
  56. else{
  57. echo $string."\n<br>".mysql_errno().": ".mysql_error()."\n<br>";
  58. }
  59. }
  60. }


Chce aby łatwiej mi się posługiwało tymi funkcjami (np. bez pisania mysql_query() or die(mysql_error()); tylko samo $db->query()).
Później w miarę możliwości będę to rozwijał więc nie chce później zmieniać całego kodu tylko w classie (przecież o to w tym chodzi?).

I nie wiem teraz czy wyciszać te funkcje (mysql_connect()) itp. czy raczej nie. Chciałbym aby moja funkcja (error()) wyświetlała błędy a nie jeszcze samo własne.

Jakieś więc rady?
big_zygi
nie wiem czy pomoże ale przejrzyj sobie to
  1. class debug
  2. {
  3. var $log,$numqueries;
  4. function debug()
  5. {
  6. $this->vars = $this->log = '';
  7. $this->numqueries = 0;
  8. }
  9. function add($mes)
  10. {
  11. $this->log .= $mes;
  12. $this->numqueries++;
  13. }
  14. function echo_log()
  15. { global $x_path;
  16. echo "<br><table><tr><td class=k colspan=4><a href=".$x_path."admin/settings.php>Debug Log</a>:</td></tr>".$this->log."</table>";
  17. die();
  18. }
  19. function error($message,$title)
  20. {
  21. global $link,$game_config;
  22. if($game_config['debug']==1){
  23. echo "<h2>$title</h2><br><font color=red>$message</font><br><hr>";
  24. echo "<table>".$this->log."</table>";
  25. }
  26. //else{
  27. //A futuro, se creara una tabla especial, para almacenar
  28. //los errores que ocurran.
  29. global $user,$x_path,$phpEx;
  30. include($x_path . 'config.'.$phpEx);
  31. if(!$link) die('mySQL nie jest teraz dostępny, baza jest przeciążona...');
  32. $query = "INSERT INTO {{table}} SET
  33. `error_sender` = '{$user['id']}' ,
  34. `error_time` = '".time()."' ,
  35. `error_type` = '{$title}' ,
  36. `error_text` = '".mysql_escape_string($message)."';";
  37. $sqlquery = mysql_query(str_replace("{{table}}", $dbsettings["prefix"].'errors',$query))
  38. or die('error fatal');
  39. $query = "explain select * from {{table}}";
  40. $q = mysql_fetch_array(mysql_query(str_replace("{{table}}", $dbsettings["prefix"].
  41. 'errors', $query))) or die('error fatal: ');
  42. if (!function_exists('message')) {
  43. echo "Błąd, proszę skontaktować się z administratorem. Błąd nr.: <b>".$q['rows']."</b>";
  44. }else{
  45. message("Błąd, proszę skontaktować się z administratorem. Błąd nr.: <b>".$q['rows']."</b>", "Błąd");
  46. }
  47. die();
  48. }
  49. }
  50. // Created by Perberos. All rights reversed (C) 2006

  1. function doquery($query, $table, $fetch = false){
  2. global $link, $debug, $x_path;
  3. // echo $query."<br />";
  4. require($x_path.'config.php');
  5. if(!$link)
  6. {
  7. $link = mysql_connect($dbsettings["server"], $dbsettings["user"],
  8. $dbsettings["pass"]) or
  9. $debug->error(mysql_error()."<br />$query","SQL Error");
  10. //message(mysql_error()."<br />$query","SQL Error");
  11. mysql_select_db($dbsettings["name"]) or $debug->error(mysql_error()."<br />$query","SQL Error");
  12. }
  13. // por el momento $query se mostrara
  14. // pero luego solo se vera en modo debug
  15. $sql = str_replace("{{table}}", $dbsettings["prefix"].$table, $query);
  16. $sqlquery = mysql_query($sql) or
  17. $debug->error(mysql_error()."<br />$sql<br />","SQL Error");
  18. //print(mysql_error()."<br />$query"."SQL Error");
  19. unset($dbsettings);//se borra la array para liberar algo de memoria
  20. global $numqueries,$debug;//,$depurerwrote003;
  21. $numqueries++;
  22. //$depurerwrote003 .= ;
  23. if($fetch)
  24. { //hace el fetch y regresa $sqlrow
  25. $sqlrow = mysql_fetch_array($sqlquery);
  26. return $sqlrow;
  27. }else{ //devuelve el $sqlquery ("sin fetch")
  28. return $sqlquery;
  29. }
  30. }
  31. // Created by Perberos. All rights reversed (C) 2006
Evinek
Nie chodzi mi o żadne classy wasze.

Jedno pytanie - czy w moim kodzie warto wyciszać funkcje mysql (connect, query itp.)?
Chce wyświetlać tylko sam błędy - bez błędów od PHP (patrz 1. post).

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.