Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Problem z MySQLi
Forum PHP.pl > Forum > PHP
BartoszLewy
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
Noddi
Ź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. ?>
BartoszLewy
Zmieniłem caluśki singleton tak jak mówiłeś. I działa winksmiley.jpg Wielkie dzięki, a o UML będę czytał, jeszcze raz dziękuje za poradę winksmiley.jpg
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.