发布于 2014-10-30 08:37:17 | 1692 次阅读 | 评论: 0 | 来源: 网友投递
PDO PHP 数据对象
POD是PHP一个扩展,PDO扩展为PHP访问数据库定义了一个轻量级的、一致性的接口,它提供了一个数据访问抽象层,这样,无论使用什么数据库,都可以通过一致的函数执行查询和获取数据。
本文为大家讲解的是php下通过pdo来连接mysql并进行简单的操作示例,感兴趣的同学参考下。
需求:
最近在linux装了新的环境,php5.6+mysql5.5+nginx。然后用原来的mysql链接数据库出现的错误。
原因就是说连接数据库的方法太旧。建议我用mysqli和PDO来连接数据库。
好吧,咱也不能落后,使用mysqli的确也简单了不少,但是PDO貌似更简单。效率也会得到提升。根据官方文档,貌似对于sql注入的一些风险也做了屏蔽。所以今天写的 博客就是关于php用PDO连接mysql的一些介绍啦!
POD是PHP一个扩展,PDO扩展为PHP访问数据库定义了一个轻量级的、一致性的接口,它提供了一个数据访问抽象层,这样,无论使用什么数据库,都可以通过一致的函数执行查询和获取数据。
PDO是PHP 5新加入的一个重大功能,因为在PHP 5以前的php4/php3都是一堆的数据库扩展来跟各个数据库的连接和处理,什么php_mysql.dll、php_pgsql.dll、php_mssql.dll、php_sqlite.dll等等扩展来连接MySQL、PostgreSQL、MS SQL Server、SQLite,同样的,我们必须借助 ADOdb、PEAR::DB、PHPlib::DB之类的数据库抽象类来帮助我们,无比烦琐和低效,毕竟,php代码的效率怎么能够我们直接用C/C++写的扩展效率高捏?所以嘛,PDO的出现是必然的,大家要平静学习的心态去接受使用,也许你会发现能够减少你不少功夫哦。
PDO 是 PHP 5.1 发行的,也就是说,在 5.1 之前的版本是不支持 PDO,5.1之后的都支持啦。在PHP5.0的PECL扩展中也可以使用。
PDO如何使用:
这里我们就以PHP的黄金搭档mysql作为例子看看:
PDO_MYSQL:PDO_MYSQL是PDO接口能够完成连接mysql数据库的驱动(注:仅使用于mysql 3.x以上版本)。
安装:打开php.ini文件,可以找到如下代码,这里可以看到mysql的驱动默认已经打开(前面没有用于注释的分号),如有连接其他数据库的需要,自行添加其他数据库的驱动程序(取出相应的项前面的分号,没有的添上)。
//各数据库的PDO驱动
extension=php_pdo.dll
extension=php_pdo_firebird.dll //Firebird
extension=php_pdo_informix.dll //Informix
extension=php_pdo_mssql.dll //sql server
extension=php_pdo_mysql.dll //mysql
extension=php_pdo_oci.dll //Oracle
extension=php_pdo_oci8.dll
extension=php_pdo_odbc.dll //DB2
extension=php_pdo_pgsql.dll //PostgreSQL
extension=php_pdo_sqlite.dll //SQLite
连接:通过创建PDO基类的实例创建连接。
//连接到数据库
$db = new PDO('mysql:host=localhost;dbname=test', $user, $pass);
不明白啥意思,俺们来慢慢讲讲。这行:
$dsn = "mysql:host=127.0.0.1;dbname=test";
就是构造我们的DSN(数据源),看看里面的信息包括:数据库类型是mysql,主机地址是localhost,数据库名称是test,就这么几个信息。不同数据库的数据源构造方式是不一样的。
$db = new PDO($dsn, 'root', '');
初始化一个PDO对象,构造函数的参数第一个就是我们的数据源,第二个是连接数据库服务器的用户,第三个参数是密码。我们不能保证连接成功,后面我们会讲到异常情况,这里我们姑且认为它是连接成功的。
$count = $db->exec("INSERT INTO foo SET name = 'heiyeluren',gender='男',time=NOW()");
echo $count;
调用我们连接成功的PDO对象来执行一个查询,这个查询是一个插入一条记录的操作,使用PDO::exec() 方法会返回一个影响记录的结果,所以我们输出这个结果。最后还是需要结束对象资源:
$db = null;
默认这个不是长连接,如果需要数据库长连接,需要最后加一个参数:array(PDO::ATTR_PERSISTENT => true)变成这样:
$db = new PDO($dsn, 'root', '', array(PDO::ATTR_PERSISTENT => true));
一次操作就这么简单,也许跟以前的没有太大区别,跟ADOdb倒是有几分相似。
使用setFetchMode方法来设置获取结果集的返回值的类型,同样类型还有:
PDO::FETCH_ASSOC -- 关联数组形式
PDO::FETCH_NUM -- 数字索引数组形式
PDO::FETCH_BOTH -- 两者数组形式都有,这是缺省的
PDO::FETCH_OBJ -- 按照对象的形式,类似于以前的 mysql_fetch_object()
$db->query($sql); 当$sql 中变量可以用$dbh->quote($params); //转义字符串的数据
$db->exec("DELETE FROM `xxxx_menu` where mid=43");