Можно ли вставить объект в базу данных? (Отвечая на вопрос в интервью PHP).
Возможно ли вставить объект в базу данных?
Ответ 1
Да, это возможно, используя serialize()
.
Но ответ чрезвычайно зависит от контекста.
Ответ 2
никто не предложил OR-mappers? интересно...
если вы создаете таблицы базы данных так, чтобы они представляли объекты, вы можете использовать объектно-реляционный картограф для хранения значений членов вашего объекта в базе данных.
для php существует propel и многие другие
Ответ 3
Если вы говорите о объекте PHP, невозможно вставить объект в базу данных. Чтобы сохранить его в базе данных, вам сначала необходимо сериализовать его и не сериализовать его во время использования.
Ответ 4
Этот вопрос крайне неопределен и undefined. Я имею в виду, с одной стороны, вы можете сериализовать объект и вставить его в базу данных. Однако "вставка объекта" зависит от контекста. Например, он ссылается на то, что вы можете вызвать оператор SQL, например:
$a = new object();
// This makes no sense.
$sql = "Insert into table_name values($a);";
Если это то, о чем он спрашивает, тогда ответ будет отрицательным, вы не сможете этого сделать, если не переопределите метод __toString()
, который возвращает значения, которые нужно вставить в базу данных. Даже тогда класс не определен, потому что вы говорите, что __toString() будет значением базы данных, но это явно не определено или подразумевается без обращения к самому объекту класса.
В любом случае, если объект представляет таблицы базы данных и т.д., вы хотите разделить каждый элемент на основе обязанностей. Например, вы можете иметь объект 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);
}
Приведенное выше имеет для меня наибольшее значение, поскольку оно четко определяет поведение, которое вы ожидаете. Вы можете просто использовать диспетчер для получения элементов из базы данных и изменения объекта, затем вы можете снова вызвать менеджера и вставить, обновить или удалить.
Ответ 5
да, вы можете просто сериализовать его в соответствующем формате. Весь вопрос такого открытого вопроса, как это, заключается в том, чтобы найти способ делать то, что задается.
Ответ 6
Следует отметить, что хранение сериализованных объектов в реляционных базах данных противоречит практически всем нормам нормализации базы данных и может считаться очень плохой практикой.
Чтобы хранить объекты в базе данных, вы должны использовать объектные реляционные карты, такие как Doctrine или Propel.
Сериализованные объекты могут храниться в вашей файловой системе. Это нормально.
Ответ 7
Короткий ответ: нет, это невозможно
Длинный ответ: вы не можете напрямую вставлять объект, вы должны его сериализовать перед хранением, например, используя встроенную функцию serialize()
или какой-либо пользовательский XML-сериализатор. Затем вы можете поместить его в столбец TEXT
или BLOB
.
Правильный ответ: Чтобы поместить объекты в базу данных, используйте инструмент ORM (Object-Relational Mapping). Большинство инфраструктур MVC имеют встроенный ORM, наиболее часто используемый шаблон Active Record.
Ответ 8
Вы также можете быть мудрым задницей:
Вы: "Вы можете взять объект PHP из памяти и перенести его на Java или .NET, а затем использовать Versant объектной базы данных для хранения объекта.