答案 0 :(得分:2)
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会忽略该参数,因此我们可以随时指定它。
答案 1 :(得分:0)
简单地说,数据访问抽象指的是PDO如何代表您与给定的数据库进行交互。一般来说,所有细节的细节,如连接特定属性,安全性,交易等,都是以标准方式为您实现的。您需要做的就是了解PDO如何实现这些,然后您就可以开始使用MySQL,MSSQL,Oracle,Postgres。
话虽如此,它并没有为您编写实际的SQL / DML。您仍然需要在物理上输入。这将我们带到第二点,数据库抽象。这是指隐藏执行查询所需的低级SQL / DML。如果您曾经使用过ORM,那么您将熟悉这个概念。而不是写
$query = 'SELECT * FROM ...'
你会写
$db->get(Person, $id)
总之,使用PDO可以获得:
你没有得到:
查看https://phpdelusions.net/pdo以便更好地理解。