ich wollte einen einstieg in klassen, nicht mehr nicht weniger.
Übung macht den Meister!
Ich möchte dir dabei noch etwas auf den Weg mitgeben:
Allerdings, solltest du "moderner" arbeiten. also nur noch für PHP5 und neuer.
Hier mal ein rudimentärer etwas modernerer Ansatz:
Wie schon gesagt, rudimentär, aber funktionsfähig!!
Das Interface: idb.php
PHP-Code:
interface Idb
{
public function __construct($dburl);
public function query($query);
public function fetch($res);
}
PHP-Code:
class db_mysql implements Idb
{
private $handle = FALSE;
public function __construct($dburl)
{
$path = parse_url($dburl);
$port = isset($path['port'])?':'.$path['port']:'';
$server = $path['host'].$port;
$this->handle = mysql_connect($server,$path['user'] ,$path['pass']);
if(FALSE === $this->handle) Throw new Exception(mysql_error());
$select = mysql_select_db(trim($path['path'],"/"),$this->handle);
if(FALSE === $select) Throw new Exception(mysql_error());
}
public function query($query)
{
$res = mysql_query($query,$this->handle);
if(FALSE === $res) Throw new Exception(mysql_error());
return $res;
}
public function fetch($res)
{
return mysql_fetch_assoc($res);
}
}
PHP-Code:
class db_sqlite implements Idb
{
private $handle = FALSE;
public function __construct($dburl)
{
$path = parse_url($dburl);
$this->handle = sqlite_open(trim($path['path'],"/"));
if(FALSE === $this->handle) Throw new Exception('Can not open: '.$dburl);
}
public function query($query)
{
$res = sqlite_query($query,$this->handle);
if(sqlite_last_error($this->handle))
Throw new Exception(sqlite_error_string(sqlite_last_error($this->handle)));
return $res;
}
public function fetch($res)
{
return sqlite_fetch_array($res,SQLITE_ASSOC);
}
}
PHP-Code:
class db
{
static public function factory($dburl)
{
$path = parse_url($dburl);
$type = 'db_'.$path['scheme'];
return new $type($dburl);
}
}
PHP-Code:
function __autoload($class_name)
{
$class_name = strtolower($class_name);
require_once $class_name . '.php';
}
try
{
// $db = db::factory('mysql://test:test@localhost/test');
// $db = db::factory('mysql://test:test@localhost:3036/test')
$db = db::factory('sqlite://localhost/test');
$res = $db->query('SELECT * FROM irgendwas');
while($row = $db->fetch($res)) print_r($row);
}
catch (Exception $e)
{
echo '<pre>';
echo 'Ausnahme gefangen: ', "\n",
$e->getMessage(), "\n",
$e->getTraceAsString(), "\n";
echo '</pre>';
}
Du solltest dich auch mit PDO, doctrine und propel/creole beschäftigen.
Kommentar