Scream
2008-10-21, 21:46:09
Ich möchte mein CMS ein wenig verbessern und habe dazu eine Datenbankklases geschrieben.
Wo seht ihr noch Verbesserungsmöglichkeiten? Gibts noch Sicherheitslücken?
<?php
/**
* Database class to implement singleton pattern on top of mysqli
*/
class Database extends mysqli {
/**
* @var object Singleton instance
*/
private static $instance = null;
// DB connection parameters:
private $dbHost = 'localhost';
private $dbUser = 'root';
private $dbPwd = 'test';
private $dbName = 'test';
/**
* Constructor
* @return void
*/
private function __construct() {
@parent::__construct($this->dbHost, $this->dbUser, $this->dbPwd, $this->dbName);
if(mysqli_connect_errno()) { // Keine Verbindung zur Datenbank möglich
$nachrichtenbox->set_get_nachricht("fehler","Verbindung fehlgeschlagen: ".mysqli_connect_error());
}
}
/**
* singleton
* @return object Database
*/
public function getInstance() {
if(self::$instance === null) {
$c = __CLASS__;
self::$instance = new $c;
self::$instance->set_charset("UTF8");
}
return self::$instance;
}
public function __clone() {
$nachrichtenbox->set_get_nachricht("fehler",__CLASS__." clonen nicht erlaubt.");
}
public function queryArray($sql) {
$db = Database::getInstance();
$result = $db->query($sql);
if($result) {
if($result->num_rows) {
while($row = $result->fetch_assoc())
$result_array[] = $row;
return $result_array;
}else {
return FALSE;
}
} else {
echo $nachrichtenbox->set_get_nachricht("fehler","FEHLER SELECT: " . $db->error . "<br />");
return FALSE;
}
}
public function querySingleItem($sql) {
$db = Database::getInstance();
$result = $db->query($sql);
if($result) {
if($result->num_rows) {
$row = $result->fetch_assoc();
return $row;
}else {
return FALSE;
}
} else {
echo $nachrichtenbox->set_get_nachricht("fehler","FEHLER SELECT: " . $db->error . "<br />");
return FALSE;
}
}
public function queryObjectArray($sql) {
$db = Database::getInstance();
$result = $db->query($sql);
if($result) {
if($result->num_rows) {
while($row = $result->fetch_object())
$result_array[] = $row;
return $result_array;
}else {
return FALSE;
}
} else {
echo $nachrichtenbox->set_get_nachricht("fehler","FEHLER SELECT: " . $db->error . "<br />");
return FALSE;
}
}
function Execute($sql) {
$db = Database::getInstance();
$result = $db->real_query($sql);
if($result) {
// return TRUE;
return $db->affected_rows;
} else {
echo $nachrichtenbox->set_get_nachricht("fehler","FEHLER EXECUTE: " . $db->error . "<br />");
return FALSE;
}
}
}
?>
Wo seht ihr noch Verbesserungsmöglichkeiten? Gibts noch Sicherheitslücken?
<?php
/**
* Database class to implement singleton pattern on top of mysqli
*/
class Database extends mysqli {
/**
* @var object Singleton instance
*/
private static $instance = null;
// DB connection parameters:
private $dbHost = 'localhost';
private $dbUser = 'root';
private $dbPwd = 'test';
private $dbName = 'test';
/**
* Constructor
* @return void
*/
private function __construct() {
@parent::__construct($this->dbHost, $this->dbUser, $this->dbPwd, $this->dbName);
if(mysqli_connect_errno()) { // Keine Verbindung zur Datenbank möglich
$nachrichtenbox->set_get_nachricht("fehler","Verbindung fehlgeschlagen: ".mysqli_connect_error());
}
}
/**
* singleton
* @return object Database
*/
public function getInstance() {
if(self::$instance === null) {
$c = __CLASS__;
self::$instance = new $c;
self::$instance->set_charset("UTF8");
}
return self::$instance;
}
public function __clone() {
$nachrichtenbox->set_get_nachricht("fehler",__CLASS__." clonen nicht erlaubt.");
}
public function queryArray($sql) {
$db = Database::getInstance();
$result = $db->query($sql);
if($result) {
if($result->num_rows) {
while($row = $result->fetch_assoc())
$result_array[] = $row;
return $result_array;
}else {
return FALSE;
}
} else {
echo $nachrichtenbox->set_get_nachricht("fehler","FEHLER SELECT: " . $db->error . "<br />");
return FALSE;
}
}
public function querySingleItem($sql) {
$db = Database::getInstance();
$result = $db->query($sql);
if($result) {
if($result->num_rows) {
$row = $result->fetch_assoc();
return $row;
}else {
return FALSE;
}
} else {
echo $nachrichtenbox->set_get_nachricht("fehler","FEHLER SELECT: " . $db->error . "<br />");
return FALSE;
}
}
public function queryObjectArray($sql) {
$db = Database::getInstance();
$result = $db->query($sql);
if($result) {
if($result->num_rows) {
while($row = $result->fetch_object())
$result_array[] = $row;
return $result_array;
}else {
return FALSE;
}
} else {
echo $nachrichtenbox->set_get_nachricht("fehler","FEHLER SELECT: " . $db->error . "<br />");
return FALSE;
}
}
function Execute($sql) {
$db = Database::getInstance();
$result = $db->real_query($sql);
if($result) {
// return TRUE;
return $db->affected_rows;
} else {
echo $nachrichtenbox->set_get_nachricht("fehler","FEHLER EXECUTE: " . $db->error . "<br />");
return FALSE;
}
}
}
?>