Hallo Ihr Profis
Ich habe vor kurzem angefangen eine Datenbank Class zu Programmieren das hat auch alles super Funktioniert nur jetzt kommt mein Problem.
index.php
db.class.php
Wie oben in der index.php angegeben greife ich zweimal auf die $get_row funktion zu allerdings wird diese nur einmal ausgeführt und jetzt ist meine Frage warum, wenn ich nämlich das ganze über einen neuen query aufruf ausführe funktioniert es????
MfG.
ppapsd
Ich habe vor kurzem angefangen eine Datenbank Class zu Programmieren das hat auch alles super Funktioniert nur jetzt kommt mein Problem.
index.php
PHP-Code:
<?php
include 'db.class.php';
// Das wird immer eine einzige Instanz der Klasse abrufen
$test = Database::singleton();
$test->connect('mysql:host=127.0.0.1;dbname=test', 'root', '');
$test->query('SELECT * FROM data','query_name');
echo "<br><br>";
while($row=$test->get_row('query_name')){
echo $row[name]."<br>";
}
while($row=$test->get_row('query_name')){
echo $row[name]."<br>";
}
?>
PHP-Code:
<?php
class Database
{
Verbindungsaufbauten
// Speichert die Instanz der Klasse
private static $instance;
// Ein private Konstruktor; verhindert die direkte Erzeugung des Objektes
protected function __construct()
{
echo 'Ich bin hergestellt';
}
// Die Singleton Funktion
public static function singleton()
{
if (!isset(self::$instance)) {
$c = __CLASS__;
self::$instance = new $c;
}
return self::$instance;
}
private function error($message){
# Gibt an ob die Error meldung ausgegeben werden soll
if($this->db_debug){
printf("Database Error: %s\n", $message);
if(!empty($this->error_nr) && !empty($this->error)){
printf("SQL Error: %s (%s)\n",$this->error_nr,$this->error);
}
die();
}
}
// Beispielmethode
public function connect($strDBLocation, $strDBUser, $strDBpassword, $strDBdsn=false, $strDBport=false)
{
# Zerteilt die DBLocation in ihre einzelnen bestandteile
if (ereg ("^([^:]+):host=([^:]*);dbname=(.+)$", $strDBLocation, $reg)) {
$this->driver = $strDBdsn; // Variable für DSN Treiber
$this->port = $strDBport; // Datenbank Port
$this->database = $reg[1]; // Um welche DB handelt es sich
$this->host = $reg[2]; // Wie lautet die Adresse zum Server
$this->db_name = $reg[3]; // Name der Datenbank
$this->DBUser = $strDBUser; // Loginbenutzername für die Datenbank
$this->DBPass = $strDBPassword; // Loginpassword für die Datenbank
# Alle Datenbanken die Unterstütz werden
# Überprüfung ob die gewünschte Datenbank Unterstützt wird.
if(in_array($this->database, array("ifx","msql","mssql","mysql","odbc","pg","sybase"))){
return $this->database();
}else{
# Gibt die Error Meldung aus
$this->error("Database type not supported");
return false;
}
} else {
# Gibt die Error Meldung aus
$this->error("Examine the data base");
return false;
}
}
private function database()
{
// Selecting connection function and connecting
if(empty($this->connected)){
$db_connect = $this->database."_connect";
// INFORMIX
if($this->database == "ifx"){
$this->connected = @call_user_func($db_connect,$this->db_name."@".$this->host,$this->DBUser,$this->DBPass);
}else if($this->database == "mysql"){
// With port
if(!$this->port){
$this->connected = @call_user_func($db_connect,$this->host.":".$this->port,$this->DBUser,$this->DBPass);
}
// Without port
else{
$this->connected = @call_user_func($db_connect,$this->host,$this->DBUser,$this->DBPass);
}
// mSQL
}else if($this->database == "msql"){
$this->connected = @call_user_func($db_connect,$this->host,$this->DBUser,$this->DBPass);
// MS SQL Server
}else if($this->database == "mssql"){
$this->connected = @call_user_func($db_connect,$this->host,$this->DBUser,$this->DBPass);
// ODBC
}else if($this->database == "odbc"){
$this->connected = @call_user_func($db_connect,$this->driver,$this->DBUser,$this->DBPass);
// Postgres SQL
}else if($this->database == "pg"){
// With port
if(!$this->port){
$this->connected = @call_user_func($db_connect,"host=".$this->host." port=".$this->port." dbname=".$this->db_name."
user=".$this->DBUser." password=".$this->DBPass);
}
// Without port
else{
$this->connected = @call_user_func($db_connect,"host=".$this->host." dbname=".$this->db_name." user=".$this->DBUser."
password=".$this->DBPass);
}
// Sybase
}else if($this->database == "sybase"){
$this->connected = @call_user_func($db_connect,$this->host,$this->DBUser,$this->DBPass);
}
if(!$this->connected){
$this->error("Wrong connection data! Can't establish connection to host.");
return false;
}else{
if($this->database != "odbc"){
if(!@call_user_func($this->database."_select_db",$this->db_name,$this->connected)){
$this->error("Wrong database data! Can't select database.");
return false;
}else{
return true;
}
}
}
}else{
$this->error("Already connected to database.");
return false;
}
}
public function query($sql, $query_name=null){
if($this->database == "odbc"){
// ODBC
if(!$this->query_id = @call_user_func($this->database."_exec",$this->connected,trim($sql))){
$this->error("No database connection exists or invalid query");
}else{
if (!$this->query_id) {
$this->error("Invalid SQL Query");
return false;
}else{
if(empty($query_name)) {
$this->query_ids[$this->anz] = $this->query_id;
}else{
$this->query_ids[$query_name] = $this->query_id;
}
$this->anz++;
}
}
}else{
// All other databases
if(!$this->query_id = @call_user_func($this->database."_query",trim($sql),$this->connected)){
$this->error("No database connection exists or invalid query");
}else{
if (!$this->query_id) {
$this->error("Invalid SQL Query");
return false;
}else{
if(empty($query_name)) {
$this->query_ids[$this->anz] = $this->query_id;
}else{
$this->query_ids[$query_name] = $this->query_id;
}
$this->anz++;
}
}
}
}
public function get_row($query_name){
// Überprüft ob eine query_nr angegeben wurde und ob diese existiert
if(isset($query_name) and in_array($query_name, array_keys($this->query_ids))){
if($this->database == "odbc"){
// ODBC database
if($row = @odbc_fetch_row($this->query_ids[$query_name])){
$x=0;
for ($i=1; $i <= @odbc_num_fields($this->query_ids[$query_name]); $i++) {
$fieldname = @odbc_field_name($this->query_ids[$query_name],$i);
$row = @odbc_result($this->query_ids[$query_name],$i);
$row_array[$x]= $row; $x++; $row_array[$fieldname]= $row;
}
return $row_array;
}else{
return false;
}
}else{
// All other databases
$row = @call_user_func($this->database."_fetch_array",$this->query_ids[$query_name]);
return $row;
}
}else{
$this->error("Invalid SQL Query");
return false;
}
}
public function count_row($query_name){
// Überprüft ob eine query_nr angegeben wurde und ob diese existiert
if(isset($query_name) and in_array($query_name, array_keys($this->query_ids))){
$row_count = @call_user_func($this->database."_num_rows",$this->query_ids[$query_name]);
if($row_count >= 0){
return $row_count;
}else{
$this->error("Can't count rows before query was made");
return false;
}
}else{
$this->error("Invalid SQL Query");
return false;
}
}
public function num_fields($query_name){
// Überprüft ob eine query_nr angegeben wurde un ob diese existiert
if(isset($query_name) and in_array($query_name, array_keys($this->query_ids))){
$row_fields = @call_user_func($this->database."_num_fields",$this->query_ids[$query_name]);
return $row_fields;
}else{
$this->error("Invalid SQL Query");
return false;
}
}
public function field_name($num_field="", $query_name){
// Überprüft ob eine query_nr angegeben wurde un ob diese existiert
if(isset($query_name) and in_array($query_name, array_keys($this->query_ids))){
if(isset($num_field)){
if($this->database == "odbc"){ $num_field++; }
$field_name = @call_user_func($this->database."_field_name",$this->query_ids[$query_name],$num_field);
return $field_name;
}else{
$this->error("Can't return the number of fields before fieldindex was made");
return false;
}
}else{
$this->error("Invalid SQL Query");
return false;
}
}
}
?>
MfG.
ppapsd
Kommentar