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

Действительно ли возможно вставить Объект в базу данных? (Спрошенный в интервью PHP.)

11
задан Peter Mortensen 15 May 2011 в 09:57
поделиться

8 ответов

Да, это возможно, используя serialize()

Но ответ сильно зависит от контекста.

17
ответ дан 3 December 2019 в 01:04
поделиться

Этот вопрос чрезвычайно расплывчатый и неопределенный. Я имею в виду, с одной стороны, вы можете сериализовать объект и вставить его в базу данных. Однако «вставка объекта» зависит от контекста. Например, имеет ли он в виду тот факт, что вы можете вызвать такой 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
ответ дан 3 December 2019 в 01:04
поделиться

Краткий ответ: нет, это невозможно

Длинный ответ: вы не можете вставить объект напрямую, вы должны сериализовать его перед сохранением, например, используя встроенный -in функция serialize () или какой-нибудь настраиваемый сериализатор XML. Затем вы можете поместить его в столбец TEXT или BLOB .

Правильный ответ: Чтобы поместить объекты в базу данных, используйте какой-нибудь инструмент ORM (Object-Relational Mapping). Большинство фреймворков MVC имеют встроенный ORM, чаще всего использующий шаблон Active Record.

1
ответ дан 3 December 2019 в 01:04
поделиться

да, вы можете, вам просто нужно сериализовать его в подходящий формат. Весь смысл такого открытого вопроса, как этот, в том, чтобы найти способ сделать то, о чем спрашивают.

3
ответ дан 3 December 2019 в 01:04
поделиться

Вы также можете быть мудрым:

Вы: «Вы могли взять объект PHP из памяти и перенести его на Java или .NET, а затем использовать Versant объектная база данных для хранения объекта. "

1
ответ дан 3 December 2019 в 01:04
поделиться

никто не предлагал OR-mappers? интересно…

если вы создаете таблицы базы данных так, чтобы они представляли объекты, вы можете использовать объектно-реляционный преобразователь для сохранения значений членов вашего объекта в базе данных.

для php существует propel и многие другие

11
ответ дан 3 December 2019 в 01:04
поделиться

Если вы говорите об объекте PHP, невозможно вставить объект в базу данных. Чтобы сохранить его в базе данных, вам сначала необходимо сериализовать его и де-сериализовать во время использования.

6
ответ дан 3 December 2019 в 01:04
поделиться

Следует отметить, что сохранение сериализованных объектов в реляционных базах данных противоречит практически всем правилам нормализации базы данных и может считаться очень плохой практикой.

Для хранения объектов в базе данных вы должны использовать объектно-реляционные преобразователи, такие как Doctrine или Propel.

Сериализованные объекты могут храниться в вашей файловой системе. Это нормально.

3
ответ дан 3 December 2019 в 01:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: