2009-05-14 14 views
1

Das ist vielleicht eher noobish, aber ich werde sowieso fragen. Ich habe eine Klasse, die in meine Datenbank einfügt. Nachdem die Einfügung beendet ist, möchte ich prüfen können, ob die Einfügung erfolgreich war. Kann mir jemand sagen, wie ein guter Weg dazu aussehen könnte?Testen eines PHP-Objekts

Ich nenne die Klasse wie folgt:

foo = new Myclass('my params'); 

print_r($foo) ein Objekt zurückgibt. Auch hier interessiert mich nur, ob der Einsatz erfolgreich war oder nicht.

Antwort

1

Von http://uk3.php.net/manual/en/function.mysql-db-query.php

mysql_db_query() selects a database, and executes a query on it. 

Gibt eine positive MySQL Ergebnis Ressource das Abfrageergebnis oder FALSE im Fehlerfall. Die Funktion gibt auch TRUE/FALSE für INSERT/UPDATE/DELETE-Abfragen zurück, um Erfolg/Fehlschlag anzuzeigen.

So können Sie haben MyClass ein Fehler-Flag im Konstruktor gesetzt, als Rückgabewert von mysql_db_query() Sie dann überprüfen Sie in Ihren Code ..

foo = new Myclass('my params'); 

if (foo->error) { 
// error occured 
} else { 
// all is good 
} 

hoffe, das hilft!

+0

Danke Mann! (Bitte geben Sie mindestens 15 Zeichen ein.) –

0

Nach dem Einfügen können Sie normalerweise die ID der neuen Zeile abfragen, sehen Sie sich die Dokumente des verwendeten Frameworks an (falls vorhanden). Außerdem sollte die Einfügung selbst einen Fehlercode oder einen throw- und exception-Fehler zurückgeben. Dies hängt wiederum vom verwendeten Framework ab.

Je nachdem, wie gründlich Sie Ihre Tests durchführen möchten, sollten Sie auch einen Blick auf phpunit werfen.

+0

sicher sein, könnte ich das tun, aber es gibt eine Menge von Anfragen, und es wäre nicht optimal sein, denke ich. Dies ist mein Rahmen. In der Methode teste ich mit mysql_affected_rows, aber ich bekomme diesen Wert nicht aus dem Objekt zurück. Danke für den Link. :) –

+0

Lustig, aber ich lese gerade etwas auf Unit Testing. Ich habe noch nie zuvor davon gehört. –

0
$foo = new Myclass('my params'); 
if ($foo->sqlerror) { 
    echo "Error Message: ".$foo->sqlerrmsg; 
} 


class MyClass { 
    var $sqlerror = false; 
    var $sqlerrmsg = null; 

    // constructor 
    function MyClass($parms) { 
    $res = mysql_query($sql); 

    if (mysql_error()) { 
     $this->sqlerrmsg = mysql_error(); 
     $this->sqlerror = true; 
    } 
    } 
} 
+0

Danke dafür. Gibt es keine Möglichkeit, anstelle einer Zeichenkette ein wahres oder falsches Val zurückzugeben? –

+0

Hey Stoßstange .. Danke. Es ist ein Spinoff von adams Code, der gut funktionieren sollte. –

0

Die Funktion mysql_query() gibt bei einer erfolgreichen Einfügung true zurück.

Haben Sie die Klasse selbst geschrieben? Wenn dies der Fall ist, könnten Sie die Funktion insert() oder save() (wie auch immer Sie es nennen) einen booleschen Wert (true/false) zurückgeben, damit Sie überprüfen können, ob der Einfügevorgang erfolgreich war.

Wenn Sie DB_DataObject verwenden geht es wie folgt aus:

$foo = new ClassX(); 
$foo->name = 'Name'; 
if($foo->insert()) { 
    //insert succeeded 
} else { 
    //insert failed 
} 
0

Sie könnten nur tun foo- $> affected_rows() , die auf Einsatz wird 1.