2010-05-13 20 views
11

¿Es posible insertar Object en una base de datos? (Preguntado en entrevista de PHP.)¿Es posible insertar Object en una base de datos?

+16

¿Esa es la pregunta completa del entrevistador? Hubiera cerrado la pregunta como "no es una pregunta real, demasiado vaga" :) –

+2

Sí, eso es lo que me preguntó :(Le pedí que me diera detalles, (en mente, dije que tenía que preguntar esto en stackoverflow, y Potter (Pekka) estaría pidiendo más detalles) –

Respuesta

17

Sí, es posible, usando serialize().

Pero la respuesta enormemente depende del contexto.

+0

Sí, me hizo la siguiente pregunta sobre la serialización, que no sabía mucho ... –

+0

gracias Pekka por corregirme –

6

Si está hablando de un objeto PHP, no es posible insertar un objeto en la base de datos. Para almacenarlo en la base de datos, primero debe serializarlo y no serializarlo en el momento de su uso.

+0

Gracias Mate por detallar –

5

Esa pregunta es extremadamente vaga e indefinida. Quiero decir, por un lado, puedes serializar un objeto e insertarlo en la base de datos. Sin embargo, "insertar un objeto" depende del contexto. Por ejemplo, se está refiriendo al hecho de que se puede llamar una instrucción SQL como:

$a = new object(); 

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

Si eso es lo que está pidiendo, entonces la respuesta es no, usted no puede hacer eso a menos que anule el método __toString() que devuelve los valores que se insertarán en la base de datos. Incluso entonces, la clase no está bien definida, porque usted está diciendo que __toString() serán valores de una base de datos, pero aún eso no está claramente definido o implícito sin referirse al objeto de la clase en sí.

En cualquier caso, si un objeto representa las tablas de la base de datos y demás, entonces desea separar cada elemento en función de las responsabilidades. Por ejemplo, puede tener el objeto A que define la tabla de la base de datos, y luego tiene un objeto B "administrador" que inserta, actualiza, elimina y selecciona el elemento de la base de datos. Por ejemplo:

// 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); 
} 

Lo anterior tiene más sentido para mí porque define claramente los comportamientos que usted esperaría. Simplemente puede usar un administrador para obtener elementos de la base de datos y modificar el objeto, luego puede volver a llamar al administrador e insertar, actualizar o eliminar.

+0

Canon versus volar –

1

Respuesta corta: no, no es posible

Respuesta larga: No puede insertar objetos directamente, usted tiene que serializarlo antes de guardar, por ejemplo utilizando una función de serialize() función o alguna serializador XML personalizado. Luego puede ponerlo en alguna columna TEXT o BLOB.

Respuesta correcta: Para colocar objetos en la base de datos, utilice alguna herramienta ORM (Asignación relacional de objetos). La mayoría de los frameworks MVC tienen incorporado ORM, más comúnmente utilizando el patrón Active Record.

1

También puede ser un sabio-culo:

Usted: "Usted podría tomar el objeto PHP desde la memoria y portarlo a Java o .NET y a continuación, utilizar una base de datos Versant objeto para almacenar el objeto "

+0

Solo sé sabio -ass si cree que puede permitirse;). Ah, y solo vote abajo si le gusta comentar ... – Ropstah

+0

aw, no sea malo, votado por diversión;) – dmp

3

sí puede, solo necesita serializarlo en un formato apropiado. El objetivo de una pregunta abierta como esa es encontrar la forma de hacer lo que se pide.

+2

+1, creo que es una pregunta de entrevista bastante buena en realidad. –

+0

Eso es absolutamente correcto @mhughes, ya que están entrevistando sin aclarar sus dudas –

11

nadie sugirió OR-mappers? interesante ...

si crea las tablas de su base de datos para que representen objetos, puede usar un asignador relacional de objetos para almacenar los valores de los miembros de su objeto en la base de datos.

para php existe propel y muchos otros

+4

+1 para ORM. Usualmente uso Doctrine para eso. – selfawaresoup

+0

+1 parece interesante – dmp

3

Debe tenerse en cuenta que el almacenamiento de objetos serializados en bases de datos relacionales en contradicción con la práctica totalidad de las reglas de normalización de bases de datos y se puede considerar muy mala práctica.

Para almacenar objetos en una base de datos, debe usar correlacionadores relacionales de objetos como Doctrine o Propel.

Los objetos serializados se pueden almacenar en su sistema de archivos. Está bien.

Cuestiones relacionadas