¿Es posible insertar Object en una base de datos? (Preguntado en entrevista de PHP.)¿Es posible insertar Object en una base de datos?
Respuesta
Sí, es posible, usando serialize()
.
Pero la respuesta enormemente depende del contexto.
Sí, me hizo la siguiente pregunta sobre la serialización, que no sabía mucho ... –
gracias Pekka por corregirme –
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.
Gracias Mate por detallar –
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.
Canon versus volar –
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.
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 "
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.
+1, creo que es una pregunta de entrevista bastante buena en realidad. –
Eso es absolutamente correcto @mhughes, ya que están entrevistando sin aclarar sus dudas –
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
+1 para ORM. Usualmente uso Doctrine para eso. – selfawaresoup
+1 parece interesante – dmp
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.
- 1. ¿Es posible insertar datos en una vista de MySQL?
- 2. ¿Es posible cargar una base de datos en la RAM?
- 3. ¿Es posible almacenar javascript en una base de datos?
- 4. ¿Es posible crear una base de datos usando NHibernate?
- 5. Insertar .csvs en una base de datos SQLite en Java
- 6. ¿Es posible que mysql cree una base de datos distribuida?
- 7. insertar nulo como valor entero en una base de datos
- 8. En Oracle, ¿es posible "insertar" una columna en una tabla?
- 9. ¿Cómo insertar caracteres especiales en una base de datos?
- 10. ¿Cómo insertar matrices en una base de datos?
- 11. ¿Es posible suprimir la actualización después de insertar en NHibernate?
- 12. LINQ Consulta para insertar datos en la base de datos
- 13. Insertar datos en la base de datos Oracle utilizando php
- 14. CodeIgniter Insertar base de datos Fallo
- 15. ¿Es posible obtener nuevos valores para Id (IDENTIDAD) antes de insertar datos en una tabla?
- 16. ¿Es posible insertar una tabla de datos VB.NET completa en un servidor SQL a la vez
- 17. ¿Es posible hacer una consulta de base de datos asíncrona/paralela en una aplicación Django?
- 18. Insertar matriz en la base de datos SQLite en android
- 19. ¿Es posible insertar un formulario dentro de una tabla html?
- 20. Es posible soltar una base de datos en ADO.NET o crear una nueva
- 21. Insertar fecha/hora en la base de datos de Access
- 22. ¿Es posible generar modelos django desde la base de datos?
- 23. INSERTAR en la cadena DateTime de la base de datos
- 24. Cómo insertar DECIMAL en la base de datos MySQL
- 25. Insertar lista en mi base de datos usando Python
- 26. ¿Cómo insertar null en la base de datos?
- 27. Si es posible, ¿cómo se puede insertar PostgreSQL?
- 28. Insertar artículos directamente en la base de datos MediaWiki
- 29. ¿Cómo insertar un archivo en la base de datos MySQL?
- 30. Insertar blob en la base de datos Oracle con C#
¿Esa es la pregunta completa del entrevistador? Hubiera cerrado la pregunta como "no es una pregunta real, demasiado vaga" :) –
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) –