发布于 2014-10-30 08:37:17 | 1680 次阅读 | 评论: 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的一些介绍啦!

 

PDO是啥

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的版本:

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);    

 

简单的查询方法:

<?php  
header('content-type:text/html;charset=utf-8');  
try {    
    $db = new PDO('mysql:host=127.0.0.1;dbname=test', 'root', '');    
    //查询    
    $rows = $db->query('SELECT * from members')->fetchAll(PDO::FETCH_ASSOC);  
    $rs = array();  
    foreach($rows as $row) {    
        $rs[] = $row;   
    }    
    $db = null;    
} catch (PDOException $e) {    
    print "Error!: " . $e->getMessage() . "<br/>";    
    die();    
}  
print_r($rs);  
?> 

 

不明白啥意思,俺们来慢慢讲讲。这行:
$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); //转义字符串的数据    

 

php pdo statement

PDOStatement::bindColumn — 绑定一列到一个 PHP 变量    
PDOStatement::bindParam — 绑定一个参数到指定的变量名    
PDOStatement::bindValue — 把一个值绑定到一个参数    
PDOStatement::closeCursor — 关闭游标,使语句能再次被执行。    
PDOStatement::columnCount — 返回结果集中的列数    
PDOStatement::debugDumpParams — 打印一条 SQL 预处理命令    
PDOStatement::errorCode — 获取跟上一次语句句柄操作相关的 SQLSTATE    
PDOStatement::errorInfo — 获取跟上一次语句句柄操作相关的扩展错误信息    
PDOStatement::execute — 执行一条预处理语句    
PDOStatement::fetch — 从结果集中获取下一行    
PDOStatement::fetchAll — 返回一个包含结果集中所有行的数组    
PDOStatement::fetchColumn — 从结果集中的下一行返回单独的一列。    
PDOStatement::fetchObject — 获取下一行并作为一个对象返回。    
PDOStatement::getAttribute — 检索一个语句属性    
PDOStatement::getColumnMeta — 返回结果集中一列的元数据    
PDOStatement::nextRowset — 在一个多行集语句句柄中推进到下一个行集    
PDOStatement::rowCount — 返回受上一个 SQL 语句影响的行数    
PDOStatement::setAttribute — 设置一个语句属性    
PDOStatement::setFetchMode — 为语句设置默认的获取模式。

 

插入,更新,删除数据,

$db->exec("DELETE FROM `xxxx_menu` where mid=43"); 



最新网友评论  共有(0)条评论 发布评论 返回顶部

Copyright © 2007-2017 PHPERZ.COM All Rights Reserved   冀ICP备14009818号  版权声明  广告服务