人们不断提到我在处理MySQL时应该在我的PHP中使用PDO,我以前从未听说过这个。
什么是PDO?它是如何使用的,有哪些优点和缺点?
谢谢,
答案 0 :(得分:14)
将PDO视为与PHP打包在一起的内置类,使您可以更轻松地与数据库进行交互。在开发PHP应用程序时,您需要处理许多事情,例如建立连接,创建查询,获取结果将资源转换为数组,使用mysql_real_escape_string()
转义MySQL注入现在需要做很多事情照顾,至少但不是最后考虑你想要从mysql跳转到mysqli或MSSQL的情况,你需要通过每个函数并更改每行代码以满足需要。 PDO通过提供一个集中式类来消除所有这些问题。
详细说明下面的代码。
使用PDO建立与MySQL的连接:
$dbh = new PDO('mysql:host='.HOST.';dbname='.DATABASE,USERNAME,PASSWORD);
就是这样,建立连接并且你可以重用$ dbh来执行查询,例如从表用户那里获取你只需要两行代码的结果。
$sth = $dbh->query('SELECT id,name,email FROM users');
$user = $sth->fetch(PDO::FETCH_ASSOC);
现在$user
将所有值作为关联数组提取。
要将值插入数据库,您需要执行以下操作。
$sth = $dbh->prepare('INSERT INTO users(name,email) VALUES(:name, :email)');
$sth->bindParam(':name', 'My Name');
$sth->bindParam(':email', 'email@email.com');
$sth->execute();
上面的代码使用了命名占位符,这样PDO可以让您远离许多漏洞,因为它可以让您远离MySQL注入。为了让你开始看看netttus的这个教程,他们已经很好地解释了这一点,本文将解释你所有关于PDO的困境
http://net.tutsplus.com/tutorials/php/why-you-should-be-using-phps-pdo-for-database-access/
答案 1 :(得分:0)
http://php.net/manual/en/book.pdo.php
PHP数据对象(PDO)扩展定义了一个轻量级,一致的 用于访问PHP中的数据库的接口。
PDO提供数据访问抽象层,这意味着, 无论您使用哪个数据库,都使用相同的功能 发出查询和获取数据。 PDO不提供数据库 抽象;它不会重写SQL或模拟缺少的功能。您 如果你需要那个设施,应该使用一个完整的抽象层。
答案 2 :(得分:0)
PDO是一个面向对象的类,用于编写和执行MySQL查询。这似乎是一个复杂的附加层,但PDO实际上允许您在PHP中更简单地编写查询,并以编程方式编写查询(其他代码为您构建查询的不同行)。
PDO还处理许多安全问题,例如转义sql查询。如果你不使用像PDO这样的数据库抽象层,你永远不会做任何这些事情,即使你试图,你也很容易忘记,或者做错了。
如果您不关心安全性(例如SQL injection)并且您能够编写所需的自然MySQL查询,那么您无需担心它。当您处理使用框架的更结构化的项目时,学习它可能会使事情变得更容易。
答案 3 :(得分:0)
PDO代表PHP数据对象。该接口允许PHP脚本通过SQL查询来查询数据库。
PDO是添加到PHP的扩展,因此该语言可以使用其各种功能。它构成了数据库的抽象接口,也就是说,无论DBMS是什么,它的所有功能都可以用来执行SQL查询。换句话说,如果Web应用程序基于MySQL DBMS,则可以在不修改源代码的情况下迁移到PostgreSQL DBMS(需要进行一些小的修改)。
与访问数据库的旧方法相比,数据库的抽象是一个优点。而且,它构成了PDO的最终优势,而不仅仅是唯一的优势。
PDO的正常运行取决于数据库驱动程序的可用性。必须支持此功能才能查询所需的DBMS。
例如,要声明SBGD MySQL驱动程序,请转到php.ini文件并添加以下行(如果尚未声明):extension = php_pdo_mysql.dll注意,还必须出现以下行:extension = php_pdo .dll对于低于5.3的PHP版本,此步骤是必需的。使用PDO(数据库连接)对象为了简化说明,我将使用一个示例:
假设数据库服务器是本地服务器(localhost),而我们要查询的数据库(MySQL)称为“数据库”。为了能够查询该数据库,我们将使用用户名“ user”和密码“ 1234”。当然,用户“用户”具有足够的特权来通过PHP脚本查询数据库。
现在假定在“数据库”数据库中创建了一个名为“用户”的表,其结构如下:
CREATE TABLE `utilisateurs` (
`id` int(10) unsigned NOT NULL auto_increment,
`date` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
`nom` varchar(40) NOT NULL,
`prenom` varchar(40) NOT NULL,
`login` varchar(40) NOT NULL,
`pass` varchar(40) NOT NULL,
PRIMARY KEY (`id`)
);
我想您对SQL语言很满意。否则,只需通过服务器上的PHPMyAdmin工具运行此代码。
现在,我们数据库的所有设置都已存在。我们将看到如何通过PDO对象使用PHP查询它。数据库连接字符串(PDO实例)连接字符串是服务器上安装的数据库连接信息的文本表示形式。在这种情况下,声明连接字符串就像创建这样的PDO实例:
<?php
$pdo = new PDO("mysql:host=localhost;dbname=mabase","user","1234");
?>