php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2005-2

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 31.08.2005, 20:48  
Gast
 
Beiträge: n/a
Standard Problem mit OOP

Also ich hab folgendes Problem:

Ich habe drei Dateien. Eine Index Datei, eine Datei für eine MySQL Klasse und eine Datei zur Auswahl des Datanbanksystems.

Also die Index Datei included eine Datei db.php, die überprüft welches Datenbanksystem benutzt werden soll (Variable dazu in einer Config File gespeichert). Wird das jeweilige DBMS unterstützt wird die bestimmte Klasse geladen, jetzt mal mysql.php. In der Klasse wird hauptsächlich das Connecten und einige Methoden zum Arbeiten mit der Datenbank bereitgestellt. Darunter gibt es eine Methode sql_query($sql) die die Querys verarbeiten soll. Nun das connecten funktioniert allerdings bekomme ich folgende Fehlermeldung, wenn ich über die index.php die Methode sql_query($sql) aufrufen möchte:

Fatal error: Call to a member function sql_query() on a non-object in /home/localhost/index.php on line 21

Hier mal die index.php
PHP-Code:
<?php 

include('includes/db.php');
$db->sql_query($query); 

?>
Hier ein Auszug der Datei db.php

PHP-Code:
<?php

switch($dbms) {
case 
'mysql':
    include(
"core/db_driver_mysql.php");
    
$db = new Driver($sqlhost$sqluser$sqlpasswd$sqlport$sqlname$debug);
    
serialize($db);
    break;
}

?>
Und hier ein Auszug der MySQL Klasse:

PHP-Code:
<?php

public function sql_query($sql
    {
        unset(
$this->query_id);
        
        if(!empty(
$sql)) {
            
$this->sql $sql;
            
            
$this->sql preg_replace("/(\n|^)#[^\n]*(\n|$)/""\\1",trim($this->sql));
            
            
/*
            if(!get_magic_quotes_gpc()) {
                $this->sql = addslashes($this->sql);
            }
            */
            
            
$this->query_id = @mysql_query($this->sql$this->connect_id);
            
            if(
$this->query_id) {
                unset(
$this->query_id);
                
$this->query_id = @mysql_query("COMMIT"$this->connect_id);
                
                if(!
$this->query_id) {
                    @
mysql_query("ROLLBACK"$this->connect_id);
                }
            }
            else 
Error::__construct("ERROR_ErrorInQuery"$this->debug);
        }
        else 
Error::__construct("ERROR_QueryEmpty"$this->debug);
    }
?>
Hat da jemand nen Tipp was ich falsch gemacht habe? Weil anscheinend erkennt er $db ja nicht als Instanz eines Objektes an, aber ich weiß nicht wie ich das machen soll das es in einer anderen Datei immer noch erkennt wird. Anfangs dachte ich noch das wäre mit serialize() zu lösen, aber brachte keinen Erfolg.
 
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 31.08.2005, 21:51  
Gast
 
Beiträge: n/a
Standard

hä?
includen, oder so?

oder was meinst du?
 
Alt 31.08.2005, 21:58  
Erfahrener Benutzer
 
Registriert seit: 27.10.2004
Beiträge: 1.093
PHP-Kenntnisse:
Fortgeschritten
Chr!s
Standard

Zitat:
Fatal error: Call to a member function sql_query() on a non-object in /home/localhost/index.php on line 21
Du schreibst $db->sql_query($query); , hast vorher $db aber nicht deklariert.. (z.B. $db = new mysql_klasse; )
Chr!s ist offline  
Alt 31.08.2005, 22:23  
Erfahrener Benutzer
 
Registriert seit: 18.07.2004
Beiträge: 2.162
PHP-Kenntnisse:
Fortgeschritten
Basti
Standard

Zitat:
Zitat von Chr!s
Du schreibst $db->sql_query($query); , hast vorher $db aber nicht deklariert.. (z.B. $db = new mysql_klasse; ) :D
Sollte ja eigentlich in der Datei passiert sein, die den Treiber auswählt. Ich vermute mal, dass du dort irgendwo übersehen hast, einen Fehler abzufangen, z.B. dass $dbms nicht korrekt gesetzt ist oder so.

Gib einfach mal $db aus, um die Stelle zu finden, wo dir das Objekt flöten geht oder nachzuschauen, ob es überhaupt gebaut wird (var_dump()).

Das serialize() ist übrigends unsinnig. Erstens verändert es die Parameter nicht und du nimmst den Rückgabewert nicht entgegen und zweitens ist es nur nötig, Objekte zu serialisieren, wenn du sie z.B. permanent speichern möchtest.

Hast du dir mal ADOdb[1] angeschaut?

[1] http://adodb.sourceforge.net/

Basti
Basti ist offline  
Alt 01.09.2005, 17:27  
Gast
 
Beiträge: n/a
Standard

@Basti:

Danke das wars, hab es irgendwie verabs�umt $dbms einen Wert zu geben, Danke!

Ja mit ADOdb arbeite ich eigentlich immer, hab mir aber mal die arbeit gemacht und selbst eine kleine schnittstelle zusammengebaut


~Edit~
M�sste es aber nicht eine Fehlermeldung ausgeben? Hier n�mlich das Ende der Switch Abfrage

PHP-Code:
<?php

default:
    
$error = new Error("ERROR_DatabaseDriverNotFound"$debug);
    break;
}

?>
 
Alt 01.09.2005, 19:37  
Erfahrener Benutzer
 
Registriert seit: 18.07.2004
Beiträge: 2.162
PHP-Kenntnisse:
Fortgeschritten
Basti
Standard

Zitat:
Zitat von kiwipresse
M�sste es aber nicht eine Fehlermeldung ausgeben? Hier n�mlich das Ende der Switch Abfrage

PHP-Code:
<?php

default:
    
$error = new Error("ERROR_DatabaseDriverNotFound"$debug);
    break;
}

?>
Wenn $dbms nicht gesetzt ist, müsste es schon eine Meldung beim switch werfen (falls nicht, error_reporting hochsetzen). Andernfalls wird zumindest ein Error-Objekt gebaut. Ob da was ausgegeben werden sollte, hängt natürlich davon ab, was im Konstruktor steht ... weisst schon, Glaskugel kaputt ...

Basti
Basti ist offline  
 


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[Erledigt] Galerie Problem... coraplanet PHP Tipps 2008 4 06.06.2008 13:42
Sessions Problem StephenKing PHP Tipps 2008 3 16.10.2007 08:30
datensätze defekt oder problem mit dem einlesen? Ministry Datenbanken 4 06.07.2006 18:42
problem!!! PHP Tipps 2006 6 08.02.2006 11:06
[Erledigt] wieder ein Problem bei phpmailer und smtp PHP Tipps 2006 24 07.02.2006 01:07
[Erledigt] Problem bei Massenmails versenden mit der Funktion mail PHP-Fortgeschrittene 3 19.01.2005 13:36
[Erledigt] Problem mit Übergabe einer Klasse in PHP4 PHP-Fortgeschrittene 10 08.01.2005 21:00
Problem mit Weiterleitung PHP Tipps 2004-2 16 22.12.2004 17:49
Smarty und PHP-Skript Problem PHP Tipps 2004-2 2 03.12.2004 22:27
[Erledigt] PHP Upload (Master Value/Local Value Problem) PHP-Fortgeschrittene 5 23.11.2004 07:21
Problem mit alter JavaScript-Funktion woods PHP Tipps 2004 1 13.08.2004 13:34
[Erledigt] Problem mit Timestamp! PHP Tipps 2004 24 08.06.2004 19:51
Login Problem PHP Tipps 2004 4 04.06.2004 18:46
foreach problem mAy^daY PHP Tipps 2004 3 02.06.2004 20:29


Alle Zeitangaben in WEZ +2. Es ist jetzt 08:18 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.