Возможно ли вставить объект в базу данных?

Можно ли вставить объект в базу данных? (Отвечая на вопрос в интервью 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 объектной базы данных для хранения объекта.