Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Problem z MySQLi
BartoszLewy
post
Post #1





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 21.09.2008

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


Witajcie!

Od niedawna zacząłem pisać w obiektowym php5. I napotkałem pewien problem, którego nie potrafię ominąć. Otóż to chciałbym używać połączenia MySQLi we wszystkich klasach, które mam zdefiniowane w mysqli_class.php.

Próbowałem używać singletonu, ale gdy odwoływałem się do zapytania to pokazywało, że w klasie nie ma takiej metody :/

Niżej przedstawie wam kod, który miał pobierać dane z mysql 

1. Klasa mysqli_class.php

CODE


<?php
class mysql

{

static private $mysql;

private $sql;



function __construct()

{

self::$mysql = $this;

self::$mysql = new mysqli ("localhost","root","","mestari");

}



static public function getReferenceMysql()

{

return self::$mysql;

}

}

?>


i blocks.php

CODE


<?php

class blocks
{
 private $mysql;
 
 function __construct()
 {
  $this -> mysql = mysql::getReferenceMysql();
 }
 
 public function getBlocks($id)
 {  
  $block_query = "SELECT * FROM blocks WHERE block_id = ".$id. "";
  
  if($result = $this -> mysql -> query($block_query))
  {
  /**
  * Przetwarzanie danych
  */
  }
 }
}

$id = $_GET['id'];
$block = new blocks();
$block -> getBlocks($id);
?>





To wszystko daje w rezultacie błąd

Fatal error: Call to a member function query() on a non-object in D:\bartosz\Projekty\www\system\classes\blocks.php on line 15
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 2)
Noddi
post
Post #2





Grupa: Zarejestrowani
Postów: 45
Pomógł: 7
Dołączył: 25.12.2004
Skąd: Kraków

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


Źle zrozumiałeś i wykorzystałeś wzorzec Singleton. Odsyłam do Wikipedii, a w szczególności do diagramu UML.
Wywala taki a nie inny błąd, ponieważ nigdzie nie wykorzystujesz konstruktora klasy mysql, gdzie tworzysz obiekt klasy mysqli.

Prawidłowo wykorzystany Singleton:

  1. <?php
  2. class mysql {
  3.  
  4. static private $conn;
  5.  
  6. private function __construct() {
  7. }
  8.  
  9. static public function getReferenceMysql()
  10. {
  11.    if (!(self::$conn instanceof mysqli)) {
  12.        self::$conn = new mysqli("localhost","root","password","database");
  13.    }
  14.    
  15.    return self::$conn;
  16. }
  17. }
  18. ?>
Go to the top of the page
+Quote Post
BartoszLewy
post
Post #3





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 21.09.2008

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


Zmieniłem caluśki singleton tak jak mówiłeś. I działa (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) Wielkie dzięki, a o UML będę czytał, jeszcze raz dziękuje za poradę (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post

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: 2.10.2025 - 16:35