Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Jak tu połączyć się z bazą?
Forum PHP.pl > Forum > Przedszkole
lamcpp
witam, wgłębiam się w programowanie obiektowe (ksiązka zaawansowane programowanie w PHP),
mam problem bo przykłady są podane dla bazy innej niż MySQL, chciałem przerobić skrypt tak by było dla MySQL, ale wyskakuje błąd:
Cytat
Fatal error: Uncaught exception 'Exception' with message 'Nie moşna po�aczy� si� z baz� danych' in D:\usr\test\index.php:19 Stack trace: #0 D:\usr\test\index.php(70): Widget->__construct(1) #1 {main} thrown in D:\usr\test\index.php on line 19

Czyli nie można połączyć się z bazą, polecenie, które najpewniej jest źle to:
Kod
   $this->hDB = mysqli_connect('localhost','root','','parts');

Czy ktoś mógłby pomóc jak to przerobić by działało w obiektówce?

Cały kod poniżej:
  1. <?php
  2. class Widget{
  3. private $id;
  4. private $name;
  5. private $description;
  6. private $hDB;
  7. private $needsUpdating = false;
  8.  
  9. public function __construct($widgetID){
  10. $this->hDB = mysqli_connect('localhost','root','','parts');
  11. if(!is_resource($this->hDB)){
  12. throw new Exception('Nie można połaczyć się z bazą danych');
  13. }
  14. $sql = "SELECT nazwa,opis FROM artykul WHERE nr_artykulu=$widgetID";
  15. $rs = mysqli_query($this->hDB, $sql);
  16. if(!is_resource($rs)){
  17. throw new Exception('Błąd przy wykonywaniu instrukcji wyboru.');
  18. }
  19. if(! mysqli_num_rows($rs)){
  20. throw new Exception('Szukanego artykułu nie ma w bazie danych');
  21. }
  22. $data = mysqli_fetch_array($rs);
  23. $this->id = $widgetID;
  24. $this->name = $data['nazwa'];
  25. $this->description = $data['opis'];
  26. }
  27.  
  28. public function getName(){
  29. return $this->name;
  30. }
  31.  
  32. public function getDescription(){
  33. return $this->description;
  34. }
  35.  
  36. public function setName($name){
  37. $this->name;
  38. $this->needsUpdating = true;
  39. }
  40.  
  41. public function setDescription($description){
  42. $this->description = $description;
  43. $this->needsUpdating = true;
  44. }
  45.  
  46. public function __destruct(){
  47. if(! $this->needsUpdating){
  48. return;
  49. }
  50.  
  51. $sql = 'UPDATE artykul SET';
  52. $sql .= "nazwa='".mysqli_real_escape_string($this->name)."',";
  53. $sql .= "opis='".mysqli_real_escape_string($this->description)."'";
  54. $sql .= "WHERE nr_artykulu=".$this->id;
  55. $rs = mysqli_query($this->hDB,$sql);
  56. if(! is_resource(rs)){
  57. throw new Exceptiopn('Wystąpił błąd podczas aktualizacji danych');
  58. }
  59. mysqli_close($this->hDB);
  60. }
  61. }
  62.  
  63. $obiekt = new Widget(1);
  64.  
  65.  
  66. ?>
nospor
1) uzywaj wlasciwego bbcode. Dla kodu PHP jest to PHP a nie CODE
2) wyswietl sobie blad to bedziesz wiedzial co jest konkretnie nie tak: mysqli_connect_error()
3) z obiektówką twoj problem nie ma zadnego związku. przenosze
lamcpp
1. Poprawiłem
2. Nic dodatkowo się nie wyświetla
3. Dlaczego temat nie ma nic wspólnego z obiektówką? Przecież dotyczy operacji wykonywanych w konstruktorze klasy?
nospor
ad2) No a gdzie ty to dales? Pokaz kod.
ad3) Co z tego ze ty napisales klase, jak problem masz z klasa nie związany.
4) Juz wiem gdzie jest blad
  1. if(!is_resource($this->hDB)){
  2. throw new Exception('Nie można połaczyć się z bazą danych');
  3. }

mysqli_connect nie zwraca RESOURCE tylko OBJECT. Nastepnym razem czytamy dokładniej manuala winksmiley.jpg Powinno byc:
  1. if(!$this->hDB){
  2. throw new Exception('Nie można połaczyć się z bazą danych');
  3. }
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.