26-05-2011, 04:33
Witam,
chciałbym wykorzystać wzorzec Singletona do połączenia się z bazą danych (MySQL) i do tego dołożyłem sobie PEAR' a, ale coś mi nie idzie. To co mam to są takie pliki:
classa.Databases.php
Wiem, że brakuje obsługi błędów.
test.php
I teraz tak. Po pierwsze czy dobrze myślę o wzorze Singletona (dobrze jest napisana klasa)? Po drugie czemu mi wywala błąd(Fatal error: Call to undefined function: MDB2_Driver_mysqli::numCol(). in pear/MDB2.php on line 1950)? To wygląda na błąd PEAR, ale jak robię normalnie bez mojej klasy to jest dobrze. Po trzecie, widziałem gdzieś jak koleś właśnie tworzył takie metody jak u mnie (fetchAll), ale czy przed tym nie powinno występować query()?
Nie wiem co tu jeszcze może być źle
chciałbym wykorzystać wzorzec Singletona do połączenia się z bazą danych (MySQL) i do tego dołożyłem sobie PEAR' a, ale coś mi nie idzie. To co mam to są takie pliki:
classa.Databases.php
Kod PHP:
<?php
require_once('pear/MDB2.php');
require_once('config.php');
class Datebase{
private $conn;
private function __construct($zmienna=null){
global $mysql_dsn;
if($zmienna==null){
$zmienna = $mysql_dsn;
}
$this->conn=MDB2::connect($zmienna);
}
static public function instance(){
static $objMDB2;
if (!isset($objMDB2)){
$objMDB2 = new Datebase();
}
return $objMDB2;
}
function select($sql){
$result = $this->conn->query($sql);
return $result;
}
function fetchAll($sql){
$result = $this->conn->fetchAll($sql);
return $result;
}
}
?>
Wiem, że brakuje obsługi błędów.
test.php
Kod PHP:
<?php
require_once('class.Database.php');
$ble = Datebase::instance();
$elb = $ble->fetchAll('SELECT * FROM moajtabela');
echo $elb;
?>
I teraz tak. Po pierwsze czy dobrze myślę o wzorze Singletona (dobrze jest napisana klasa)? Po drugie czemu mi wywala błąd(Fatal error: Call to undefined function: MDB2_Driver_mysqli::numCol(). in pear/MDB2.php on line 1950)? To wygląda na błąd PEAR, ale jak robię normalnie bez mojej klasy to jest dobrze. Po trzecie, widziałem gdzieś jak koleś właśnie tworzył takie metody jak u mnie (fetchAll), ale czy przed tym nie powinno występować query()?
Nie wiem co tu jeszcze może być źle