Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Poczatki z PHP5 i MySql, mam problem z utworzenie połączenia z MySql
Miko05
post 23.08.2012, 08:37:35
Post #1





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 23.08.2012

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


Witam

Do tej pory programowałem struturalnie i postanowiłem przesiąść się na obiektowe programowanie.
rozpoczołem nauke PHP5 i mam problem.

Stworzyłem plik class.Widget.php i index.php poniżej ich zawartości.
A mój problem polega na tym że nie pobiera danych z bazy danych, anie też nie otrzymuje żadnego komuniaktu błądu.


class.Widget.php
  1. <?php
  2.  
  3. class Widget{
  4.  
  5.  
  6.  
  7. private $id;
  8. private $name;
  9. private $description;
  10. private $hDB;
  11. private $polaczenie;
  12. private $needUpdateing = false;
  13.  
  14. public function _construct($widgetID){
  15.  
  16. $this->hDB = new mysqli("localhost", "user", "hasło", "nazwa_bazy");
  17.  
  18. if(!is_resource($this->hDB)){
  19. throw new Exception('nie można połączyć się z bazą');
  20. }
  21.  
  22. if(0 !== mysqli_connect_errno($this->hDB)) {
  23. throw new Exception(mysqli_connect_error($this->hDB));
  24. }
  25.  
  26.  
  27.  
  28. $sql = "SELECT * FROM artykul WHERE nr_artykulu = $widgetID";
  29. $rs = $this->hDB->query($sql);
  30. if(!is_resource($rs)){
  31. throw new Exception('Błąd przy wykonywaniu instrukcji wyboru.');
  32. }
  33.  
  34. if(!mysql_num_rows($rs)){
  35. throw new Exception('Szukanego artykułu nie ma w bazie!');
  36. }
  37.  
  38. $data = $rs->fetch_array();
  39. //$data = mysql_fetch_array($rs);
  40. $this->id=$widgetID;
  41. $this->name=$data['name'];
  42. $this->description=$data['opis'];
  43.  
  44.  
  45. }
  46.  
  47. public function getName(){
  48. return $this->name;
  49. }
  50.  
  51. public function getDescription(){
  52. return $this->description;
  53. }
  54.  
  55. public function setName($name){
  56. $this->name = $name;
  57. $this->needUpdating = true;
  58. }
  59.  
  60. public function setDescription($description){
  61. $this->description = $description;
  62. $this->needUpdating = true;
  63. }
  64.  
  65. public function _destruct(){
  66. if(! $this->needUpdating){
  67. return;
  68. }
  69.  
  70. $sql = 'UPDATE "artykul" SET';
  71. $sql .= "\"nazwa\"= '".mysql_escape_string($this->name)."', ";
  72. $sql .= "\"opis\"= '".mysql_escape_string($this->description)."', ";
  73. $sql .= "WHERE nr_artykulu=".$this->id;
  74.  
  75. //$rs=mysql_query($thishDB. $sql);
  76.  
  77. if(! is_resource($rs)){
  78. throw new Exception('Wystąpił błąd podczas akutalizacji bazy danych.');
  79. }
  80.  
  81. mysql_close($this->hDB);
  82. }
  83.  
  84. }
  85.  
  86. ?>



i plik index.php
  1. <?php
  2.  
  3. require_once('class.Widget.php');
  4.  
  5. try{
  6. $objWidget = new Widget('2');
  7.  
  8. print "Nazwa artykulu: ".$objWidget->getName() . "<br/>\n";
  9. print "Opis artykulu: ".$objWidget->getDescription() . "<br/>\n";
  10.  
  11. $objWidget->setName('Trampki');
  12. $objWidget->setDescription('Trampki o duzym przebiegu');
  13.  
  14. } catch (Expetion $e){
  15. die ("Wystapil problem: ". $e->getMessage() );
  16. }
  17.  
  18. ?>


Go to the top of the page
+Quote Post
Tajgeer
post 23.08.2012, 12:38:59
Post #2





Grupa: Zarejestrowani
Postów: 290
Pomógł: 48
Dołączył: 11.05.2008
Skąd: Kielce

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


  1. ini_set('display_errors', 1);
Go to the top of the page
+Quote Post
nospor
post 23.08.2012, 12:44:29
Post #3





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Z jednej strony używasz mysqli a z drugiej strony używasz mysql_num_rows..... jedno nie ma związku z drugim...

I tak jak napisał Tajgeer włącz wyświetlanie błędów


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
mikolaj51
post 23.08.2012, 12:52:50
Post #4





Grupa: Zarejestrowani
Postów: 59
Pomógł: 13
Dołączył: 16.03.2012

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


  1. ...
  2. function __construct($widgetID){
  3. ...
Go to the top of the page
+Quote Post
Miko05
post 23.08.2012, 17:22:27
Post #5





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 23.08.2012

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


Wprowadziłem poprawkę która zasugerował Mikołaj51

  1. function __construct($widgetID){


i wyświetliło błąd

Fatal error: Uncaught exception 'Exception' with message 'nie można połączyć się z bazą' in /home/septsit/public_html/php5/class.Widget.php:24 Stack trace: #0 /home/septsit/public_html/php5/index.php(6): Widget->__construct('1') #1 {main} thrown in /home/septsit/public_html/php5/class.Widget.php on line 24
Go to the top of the page
+Quote Post
mikolaj51
post 23.08.2012, 20:06:17
Post #6





Grupa: Zarejestrowani
Postów: 59
Pomógł: 13
Dołączył: 16.03.2012

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


Masz problem z połączeniem się z bazą danych... Widzę, że ten kod był pod bazy danych PostgreSQL smile.gif

Edit:

może zamiast:
  1. if(!is_resource($this->hDB)){
  2. throw new Exception('nie można połączyć się z bazą');
  3. }

spróbuj tak

  1. if($this->hDB->connect_errno){
  2. throw new Exception('nie można połączyć się z bazą');
  3. }


Ten post edytował mikolaj51 23.08.2012, 20:09:48
Go to the top of the page
+Quote Post
Miko05
post 23.08.2012, 23:00:27
Post #7





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 23.08.2012

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


Pomogło dzięki

teraz za to mam nowy błąd
Fatal error: Uncaught exception 'Exception' with message 'Błąd przy wykonywaniu instrukcji wyboru.' in /home/septsit/public_html/php5/class.Widget.php:36 Stack trace: #0 /home/septsit/public_html/php5/index.php(6): Widget->__construct('1') #1 {main} thrown in /home/septsit/public_html/php5/class.Widget.php on line 36

ale zamieniłem
  1. $sql = "SELECT * FROM artykul WHERE nr_artykulu = $widgetID";
  2. $rs = $this->hDB->query($sql);
  3. if(!is_resource($rs)){
  4. throw new Exception('Błąd przy wykonywaniu instrukcji wyboru.');
  5. }


na

  1. $sql = "SELECT * FROM artykul WHERE nr_artykulu = $widgetID";
  2. $rs = $this->hDB->query($sql);
  3. if ($rs === false){
  4. throw new Exception('Błąd przy wykonywaniu instrukcji wyboru.');
  5. }


i wywaliłem

  1. if(!mysql_num_rows($rs)){
  2. throw new Exception('Szukanego artykułu nie ma w bazie!');
  3. }


i zadziałało smile.gif

ale pytanie czy moge jakość sprawdzić czy dany wiersz istnieje w bazie?


Ten post edytował Miko05 23.08.2012, 23:06:02
Go to the top of the page
+Quote Post
mikolaj51
post 23.08.2012, 23:48:42
Post #8





Grupa: Zarejestrowani
Postów: 59
Pomógł: 13
Dołączył: 16.03.2012

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


Np. tak:

  1. $sql = "SELECT * FROM artykul WHERE nr_artykulu = $widgetID";
  2. $rs = $this->hDB->query($sql);
  3. if($rs->num_rows == 0){
  4. //nie ma takiego rekordu
  5. }
  6. else{
  7. //jest
  8. }


Ten post edytował mikolaj51 23.08.2012, 23:49:28
Go to the top of the page
+Quote Post
lukaskolista
post 24.08.2012, 07:38:39
Post #9





Grupa: Zarejestrowani
Postów: 872
Pomógł: 94
Dołączył: 31.03.2010

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


Nie
  1. $sql = "SELECT * FROM artykul WHERE nr_artykulu = $widgetID";
tylko
  1. $sql = "SELECT primary_key_kolumn FROM artykul WHERE nr_artykulu = $widgetID";
, jezeli artykul ma kilka kolumn typu text to nie ma sensu tego wszystkiego pobierac tylko po to, zeby sprawdzic, czy artykul istnieje
Go to the top of the page
+Quote Post
mikolaj51
post 24.08.2012, 07:55:57
Post #10





Grupa: Zarejestrowani
Postów: 59
Pomógł: 13
Dołączył: 16.03.2012

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


lukaskolista - ale potem autor te dane wykorzystuje:

  1. (...)
  2. $data = $rs->fetch_array();
  3. //$data = mysql_fetch_array($rs);
  4. $this->id=$widgetID;
  5. $this->name=$data['name'];
  6. $this->description=$data['opis'];
  7. (...)
Go to the top of the page
+Quote Post
Miko05
post 27.08.2012, 07:22:25
Post #11





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 23.08.2012

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


Bardzo dziękuje za pomoc
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 14.08.2025 - 10:26