2010-05-13 10 views
11

Ist es möglich, Objekt in eine Datenbank einzufügen? (In PHP-Interview gefragt.)Ist es möglich, Objekt in eine Datenbank einzufügen?

+16

Ist das die vollständige Frage des Interviewers? Ich hätte die Frage als "keine echte Frage - zu vage" geschlossen :) –

+2

Ja, das ist, was er mir fragte :(Ich bat ihn, Details zu geben, (In Gedanken sagte ich, ich muss dies in stackoverflow fragen, und Potter (Pekka) würde um weitere Informationen zu fragen) –

Antwort

17

Ja, es ist möglich, mit .

Aber die Antwort enorm hängt vom Kontext ab.

+0

Ja er mich nächste Frage in Bezug auf die Serialisierung gefragt, was ich viel den Ball hielt wusste ... –

+0

dank Pekka für mich zu korrigieren. –

6

Wenn Sie über PHP-Objekt sprechen, ist es nicht möglich, ein Objekt in die Datenbank einzufügen. Um es in der Datenbank zu speichern, müssen Sie es zunächst serialisieren und es zum Zeitpunkt der Verwendung wieder serialisieren.

+0

dank Kamerad für die Detaillierung –

5

Diese Frage ist extrem vage und undefiniert. Ich meine, auf der einen Seite können Sie ein Objekt serialisieren und in die Datenbank einfügen. Das "Einfügen eines Objekts" hängt jedoch vom Kontext ab. Zum Beispiel bezieht er auf die Tatsache, dass Sie eine SQL-Anweisung aufrufen können:

$a = new object(); 

// This makes no sense. 
$sql = "Insert into table_name values($a);"; 

Wenn das ist, was er fragt, dann ist die Antwort nein, können Sie das nicht tun, wenn Sie die __toString() Methode überschreiben welche die Werte zurückgibt, die in die Datenbank eingefügt werden sollen. Selbst dann ist die Klasse nicht gut definiert, weil Sie sagen, dass __toString() ein Datenbankwert sein wird, aber dies ist nicht klar definiert oder angedeutet, ohne auf das Klassenobjekt selbst zu verweisen.

In jedem Fall jedoch, wenn ein Objekt Datenbanktabellen usw. darstellt, möchten Sie die einzelnen Elemente je nach Verantwortlichkeiten trennen. Zum Beispiel können Sie Objekt A haben, das die Datenbanktabelle definiert, und dann ein "Manager" -Objekt B haben, das das Element aus der Datenbank einfügt, aktualisiert, löscht und auswählt. Zum Beispiel:

// NOT REAL PHP CODE.... 
class Table_Name 
{ 
    // Define primary keys, foreign keys, and attributes of the table. 
    private $column1; 
    public function setColumn1($value); 
    public function getCOlumn1(); 
} 

class Table_Name_Manager 
{ 
    public function insert(Table_Name $obj); 
    public function delete(Table_Name $obj); 
    public function select(Table_Name $obj); 
} 

Das oben genannte macht für mich den meisten Sinn, weil es klar definiert die Verhaltensweisen, die Sie erwarten würden. Sie können einfach einen Manager verwenden, um Elemente aus der Datenbank zu entfernen und das Objekt zu ändern. Anschließend können Sie den Manager erneut aufrufen und einfügen, aktualisieren oder löschen.

+0

Canon gegen –

1

Kurze Antwort: Nein, es ist nicht möglich

Lange Antwort: Sie können nicht Objekt direkt einfügen, haben Sie es serialisiert wird vor dem Speichern, zum Beispiel mit Hilfe der integrierten in serialize() Funktion oder einem benutzerdefinierten XML-Serializer. Dann können Sie es in einige TEXT oder BLOB Spalte setzen.

Richtige Antwort: Verwenden Sie ein ORM-Tool (Object-Relational Mapping), um Objekte in die Datenbank zu stellen. Die meisten MVC-Frameworks verfügen über ein eingebautes ORM, das am häufigsten Active Record-Muster verwendet.

1

Sie können auch ein kluger Esel sein:

Sie: „Du könntest nehmen Sie das PHP-Objekt aus dem Speicher und Portierung auf Java oder .NET und dann verwenden, um eine Versant Objektdatenbank das Objekt zu speichern . "

+0

Nur fliegen eine weise sein -ass wenn du denkst du kannst es dir leisten;). Oh, und nur down-vote, wenn du dich interessierst .. – Ropstah

+0

aw, sei nicht gemein, upvoted für Spaß;) – dmp

3

Ja, Sie können, müssen Sie nur in ein passendes Format zu serialisieren. Der springende Punkt einer offenen Frage wie dieser ist es, einen Weg zu finden, was gefragt wird.

+2

+1, ich denke, es ist eine ziemlich gute Interviewfrage tatsächlich. –

+0

Das ist absolut korrekt @ Mhughes, als sie ihre Zweifel nicht klären –

11

Niemand schlug OR-Mapper vor? interessant ...

Wenn Sie Ihre Datenbanktabellen so erstellen, dass sie Objekte darstellen, können Sie mit einem objektrelationalen Mapper die Werte Ihrer Objektmitglieder in der Datenbank speichern.

für PHP gibt es propel und viele andere

+4

+1 für ORM. Normalerweise verwende ich Doctrine dafür. – selfawaresoup

+0

+1 sieht interessant aus – dmp

3

Es sollte beachtet werden, dass serialisierte Objekte in relationalen Datenbanken speichern praktisch alle Regeln Normalisierung Datenbank widerspricht und kann sehr schlechte Praxis in Betracht gezogen werden.

Um Objekte in einer Datenbank zu speichern, sollten Sie objektbezogene Mapper wie Doctrine oder Propel verwenden.

Serialisierte Objekte können jedoch in Ihrem Dateisystem gespeichert werden. Das ist ok.

Verwandte Themen