13. php数据库抽象层PDO(一)
1. PDO安装
1.1 Linux
--with-pdo-mysql=/usr/local/mysql //其中"/usr/local/mysql"为MySQL服务器安装目录
1.2 Windows
修改php.ini文件,去掉注释
extension=php_pdo.dll //所有PDO驱动程序共享的扩展,必须有
extension=php_pdo_mysql.dll //使用mysql驱动,如果想要使用其他驱动,只需将前面的注释去掉
1.3 查看phpinfo()函数,里面会有相应的配置信息
2. 创建PDO对象
2.1 PDO构造方法原型如下:
__construct(string dsn[,string username[,string password[,array driver_options]]]) //PDO的构造方法
构造方法中的第一个必选参数是数据源名(DSN),用来定义一个确定的数据库和必须用到的驱动程序。DSN的PDO命名惯例为PDO驱动程序的名称,后面为一个冒号,再后面是一个可选的驱动程序的数据库连接变量信息,如主机名,端口和数据库名。例如,连接Oracle服务器和连接Mysql服务DSN如下:
oci:dbname=//localhost:1521/mydb //Oracle服务器DSN,oci:作为驱动前缀,主机localhost,端口1521,数据库mydb
mysql:host=localhost;dbname=testdb //连接MySQL服务器的DSN,mysql:作为驱动前缀,主机localhost,数据库testdb
构造方法第二个参数username和第三个password参数指定用户名和密码。
- 最后一个参数driver_options需要一个数组,用来指定连接所需的所有额外选项,传递附加的调优参数到PDO底层驱动程序。
2.2 以多种方式调用构造方法
2.2.1 将参数嵌入到构造函数中
<?php
try{
$dbh = new PDO("mysql:dbname=testdb;host=127.0.0.1", "username", "password");
}catch(PDOException $e){
echo "数据库连接失败:" . $e->getMessage();
}
2.2.2 将参数存放在文件中
创建PDO对象时,可以把DSN字符串放在另一个本地或远程文件中,并在构造函数中引用这个文件。只要将对应文件中的DSN驱动改变,就可以在多种数据库系统之间切换。
<?php
try{
$dbh = new PDO('uri:file:///usr/local/dbconnect', 'username', 'password');
}catch(PDOException $e){
echo '连接失败:' . $e->getMessage();
}
2.2.3 引用php.ini文件
在php.ini文件中把DSN信息赋给一个名为pdo.dsn.aliasname的配置参数,这里aliasname是后面将提供给构造函数的DSN别名。如下为连接Oracle服务器
[PDO]
pdo.dsn.oraclepdo = "OCI:dbname=//localhost:1521/mydb;charset=UTF-8"
重启apache后,可以在PHP程序中,调用PDO构造方法时,在第一个参数中使用这个别名。
try{
//使用php.ini文件中的oraclepdo别名
$dbh = new PDO("oraclepdo", "scott", "tiger");
}catch(PDOException $e){
echo "数据库连接失败:" . $e->getMessage();
}
2.2.4 PDO与连接有关的选项
可以将下列必要的几个选项组组成数组传递给构造方法的第四个参数driver_opts中,用来传递附加的调优参数到PDO或底层驱动程序。常用的选项如下:
选项名 | 描述 |
---|---|
PDO::ATTR_AUTOCOMMIT | 确定PDO是否关闭自动提交功能,设置FALSE值时关闭 |
PDO::ATTR_CASE | 强制PDO获取的表字段字符的大小写转换,或原样使用列信息 |
PDO::ATTR_ERRMODE | 设置错误处理的模式 |
PDO::ATTR_PERSISTENT | 确定连接是否为持久连接,默认为FALSE |
PDO::ATTR_ORACLE_NULLS | 将返回的空字符串转换为SQL的NULL |
PDO::ATTR_PREFETCH | 设置应用程序提前获取的数据大小,以k字节为单位 |
PDO::ATTR_TIMEOUT | 设置超时之前等待的时间(秒数) |
PDO::ATTR_SERVER_INFO | 包含与数据库特有的服务器信息 |
PDO::ATTR_SERVER_VERSION | 包含与数据库服务器版本号有关的信息 |
PDO::ATTR_CLIENT_VERSION | 包含与数据库客户端版本号有关的信息 |
PDO::ATTR_CLIENT_VERSION | 包含与数据库客户端版本号有关的信息 |
PDO::ATTR_CONNECTION_STATUS | 包含数据库特有的与连接状态有关的信息 |
PDO::MYSQL_ATTR_INIT_COMMAND | 连接数据库服务器时执行的sql语句 |
详见:PHP Manual›PDO 驱动›MySQL Functions (PDO_MYSQL)
例如:在连接数据库时设置编码为UTF-8
<?php
$db = new PDO('mysql:host=myhost;dbname=mydb', 'login', 'password', array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES \'UTF8\''));
3. PDO对象中的成员方法
共13个成员方法
方法名 | 描述 |
---|---|
getAttribute() | 获取一个”数据库连接对象”的属性 |
setAttribute() | 为一个”数据库连接对象”设定属性 |
errorCode() | 获取错误码 |
errorInfo() | 获取错误的信息 |
exec() | 处理一条SQL语句,并返回所影响的条目数 |
query() | 处理一条SQL语句,并返回一个”PDOStatement”对象 |
quote() | 为某个SQL中的字符串添加引号 |
lastInsertId() | 获取插入到表中的最后一条数据的主键值 |
prepare() | 负责准备要执行SQL语句 |
getAvailableDrivers() | 获取有效的PDO驱动器名称 |
beginTransaction() | 开始一个事务,标明回滚起始点 |
commit() | 提交一个事务,并执行SQL |
rollback() | 回滚一个事务 |
还没有评论,来说两句吧...