Что это означает «PDO обеспечивает уровень абстракции доступа к данным» и «PDO не обеспечивает абстракцию базы данных»?

0

Я новичок в PHP и решил начать изучение PDO, но одна вещь, которая меня путает много: PDO обеспечивает уровень абстракции доступа к данным, а PDO не обеспечивает абстракцию базы данных

Что это значит?

Ссылка ссылки

Может ли кто-нибудь сказать?

Спасибо !!!

  • 0
    Это объясняется во втором абзаце в вашей ссылке ...
  • 0
    Я думаю, что страница, на которую ссылается ваша ссылка, объясняет это очень хорошо. Вы можете использовать те же функции PHP при использовании PDO для другой базы данных, но вам может потребоваться адаптировать ваш SQL к базе данных, которую вы используете.
Показать ещё 2 комментария
Теги:
mysqli
pdo

2 ответа

1
Лучший ответ

PDO обеспечивает уровень абстракции доступа к данным: PDO может абстрагировать "драйвер базы данных" (например, MySQL, PostgreSQL и т.д.).

PDO не обеспечивает абстракции базы данных: PDO не может абстрагировать SQL-запросы.

пример

Этот SQL работает с MySQL, но не с PostgreSQL.

// MySQL connection
$pdo = new PDO("mysql:host=$host;dbname=$dbname", $username, $password, $options);

$sql = "REPLACE INTO blog (uuid, title) VALUES (:uuid, :title)";
$pdo->prepare($sql)->execute(['uuid' => '1234', 'title' => 'test']);

// PostgreSQL connection
$pdo2 = new PDO("pgsql:host=$host;dbname=$dbname", $username, $password, $options);

// This should fail
$pdo2->prepare($sql)->execute(['uuid' => '1234', 'title' => 'test']);

PS: PDO не обеспечивает "реальный" уровень абстракции доступа к данным.

Например, объект PDO имеет функцию lastInsertId(). Для SQLite и MySQL вы можете просто назвать это следующим:

$id = $pdo->lastInsertId();

Однако PostgreSQL требует явного идентификатора последовательности. По умолчанию это следует за форматом tablename_idfield_seq, поэтому мы можем указать следующее:

$id = $pdo->lastInsertId('articles_id_seq');

К счастью, этот параметр игнорируется SQLite и MySQL, поэтому мы можем просто указать его все время.

  • 0
    Можете ли вы сделать один пример для меня?
  • 0
    Хорошо, это означает, что функции базы данных одинаковы, но операторы SQL могут отличаться в разных базах данных, т.е. MySQL имеет разные операторы SQL при создании новой таблицы по сравнению с базой данных Oracle. Вы имеете в виду, что мы должны вручную обрабатывать операторы SQL, а PDO не обрабатывает их вручную, это делает программист. Я прав?
Показать ещё 1 комментарий
1

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

При этом он не записывает фактический SQL/DML для вас. Вы все еще должны физически вводить это. Что приводит нас ко второму пункту, абстракции базы данных. Это относится к сокрытию низкоуровневого SQL/DML, необходимого для выполнения запросов. Если вы когда-либо работали с ORM, тогда вы будете знакомы с этой концепцией. Вместо написания

$query = 'SELECT * FROM ...'

вы напишете

$db->get(Person, $id)

Таким образом, с PDO вы получаете:

  • соединений, безопасности, обработки ошибок и других абстракций доступа к данным

Вы не получаете:

  • SQL/DML, написанный за кулисами для вас, как вы бы с ORM

Взгляните на https://phpdelusions.net/pdo для лучшего понимания.

  • 0
    Хорошо, это означает, что функции базы данных одинаковы, но операторы SQL могут отличаться в разных базах данных, т.е. MySQL имеет разные операторы SQL при создании новой таблицы по сравнению с базой данных Oracle. Вы имеете в виду, что мы должны вручную обрабатывать операторы SQL, а PDO не обрабатывает их вручную, это делает программист. Я прав?
  • 0
    Хорошо, это означает, что функции базы данных одинаковы ... Нет, они не одинаковы; но PDO делает их последовательными.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню