是否可以在数据库中插入Object? (在PHP访谈中提问。)
答案 0 :(得分:17)
是的,可以使用serialize()
。
但答案非常取决于背景。
答案 1 :(得分:11)
答案 2 :(得分:6)
如果您正在谈论PHP对象,则无法将对象插入数据库。要将其存储到数据库中,首先需要对其进行序列化,并在使用时对其进行反序列化。
答案 3 :(得分:5)
这个问题非常含糊不清。我的意思是,一方面,您可以序列化一个对象并将其插入数据库。但是,“插入对象”取决于上下文。例如,他是指你可以调用SQL语句这样的事实:
$a = new object();
// This makes no sense.
$sql = "Insert into table_name values($a);";
如果这是他要求的,那么答案是否定的,除非你覆盖返回要插入数据库的值的__toString()
方法,否则你不能这样做。即使这样,这个类也没有很好地定义,因为你说__toString()将是一个数据库值,但是没有引用类对象本身就没有明确定义或暗示。
在任何情况下,如果Object表示数据库表等,那么您希望根据职责分离每个项目。例如,您可以拥有定义数据库表的对象A,然后使用“管理器”对象B来插入,更新,删除和从数据库中选择项目。例如:
// 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);
}
以上对我来说最有意义,因为它清楚地定义了您期望的行为。您可以简单地使用管理器从数据库中获取项目,然后修改对象,然后再次调用管理器并插入,更新或删除。
答案 4 :(得分:3)
是的,你可以,你只需要将其序列化为适当的格式。 这样一个开放式问题的全部意义在于找到一种方法来做所谓的事情。
答案 5 :(得分:3)
应该注意的是,将序列化对象存储到关系数据库中几乎与所有数据库规范化规则相矛盾,并且可以被认为是非常糟糕的做法。
要在数据库中存储对象,您应该使用对象关系映射器,如Doctrine或Propel。
虽然序列化对象可以存储在您的文件系统中。没关系。
答案 6 :(得分:1)
简短回答:不,这是不可能的
答案很长:你不能直接插入Object,你必须在存储之前序列化它,例如使用内置的serialize()
函数或一些自定义XML序列化程序。然后,您可以将其放在TEXT
或BLOB
列中。
正确答案:要将对象放入数据库,请使用一些ORM(对象关系映射)工具。大多数MVC框架都内置了ORM,最常用的是Active Record模式。
答案 7 :(得分:1)
你也可以成为一个明智的人:
您:“您可以从内存中获取PHP对象并将其移植到Java或.NET,然后使用Versant对象数据库来存储对象。”