PHP PDO使用学习
基础概念
PDO是PHP Date Object的简称,随PHP5.1发布,支持多种数据库(Firebird、freeTDS、Interbase、MySql等),使用时仅需使用PDO接口中的方法就可以对数据库进行操作,选择不同的数据库仅需修改PDO中的DSN(数据源名称)即可。
PDO是一个“数据库访问抽象层”;作用是统一各种数据库的访问接口,与mysql函数可以相比,跨数据库能力更强;与ADODB相比,效率更高。
PDO配置
linux环境(使用mysql)
在configure命令中添加如下代码
--with-pdo-mysql=/path/to/mysql/installation
Windows环境(使用mysql)
在php.ini文件中添加
extension=php_pdo.dll
extension=php_mysql_pdo.dll
或者将这两句的注释去掉(该文件中的注释格式是#或者:)
PDO连接数据库
首先需要实例化一个PDO对象
PDO构造函数
__constructs(string $dsn[,string $username[,string $password[,array $driver_options]]])
$dsn:数据源名,包括主机名端口号和数据库名称
$username:连接数据库的用户名
$password:连接数据库的密码
$dirver_options:连接数据库选项(驱动选项数组){例如array(PDO:ATTR_PERSISTENT => true),这样数据库连接即为持久链接}
例(连接mysql数据库):
<?php
$dbms = 'mysql';
$host = 'localhost';
$dbName = 'test';
$user = 'root';
$password = '';
$dsn = "$dbms:host=$host;dbname=$dbName";
try
{
$dbh = new PDO($dsn,$user,$password); //初始化PDO对象
echo "连接成功!";
foreach ($dbh->query('SELECT * FORM FOO') as $row)
{
print_r($row);
}
$dbh = null; //将连接返回的PDO对象置空,相当于将连接断开
}
?>
DSN :Date Source Name(数据源名称) 提供连接数据库需要的信息。
格式为三部分:PDO驱动名称(如mysql、sqlite等);冒号和驱动特定的语法。
例如:连接数据库mysql
$dsn="$mysql:host=localhost;port=3303;dbname=test"
因为数据库服务器和PHP脚本不在一个服务器上,而数据库尽在特定端口上监听连接请求(mysql是3306),单数据库管理员可能会修改端口号,多以PHP脚本有可能会找不到数据库的端口,此时可以在DSN中包含端口号。
PDO执行Sql语句
exec方法
int PDO:exec(string statement); //statement为待执行的Sql语句
返回执行后受影响的行数,通常用于insert、delete和update语句。
query方法
PDOStatement PDO::query(string statement); //statement为待执行的Sql语句
返回PDOStatement对象。
预处理语句–prepare和execute
使用prepare预处理查询语句,之后使用execute执行
PDOStatment PDO::prepare(string statement[,array driver_options]);
bool PDOStatement::excute([array input_parameters]);
PDO中获取结果集
fetch方法
mixed PDOStatement ::fetch([int fetch_style[,int cursor_orientation[,int cursor_offset]]]);
fetch_style为控制结果集的返回方式
fetch_style值 | 返回值形式 |
PDO::FETCH_ASSOC | 关联数组 |
PDO::FETCH_NUM | 数字索引数组 |
PDO::FETCH_BOTH | 两者数组形式都有(默认返回) |
PDO::FETCH_OBJ | 对象形式 |
PDO::FETCH_BOUND | 数字索引数组 |
PDO::FETCH_LAZY | 以关联数组、数字索引数组、对象三种形式返回 |
cursor_offset:游标的偏移量
使用方法如下:
<?php
$dsn = "mysql:host='localhost';port=3306;dbname='test'";
$user = "root";
$password = "";
try
{
$pdo = new PDO($dsn,$user,$password) //连接数据库,连接失败弹出异常
$query = "select * from user_message"; //sql查询语句
$result = $pdo->prepare($query); //准备查询语句
$result->excute(); //执行查询语句并返回结果集
while($res = $result->fetch(PDO::FETCH_ASSOC)) //获取查询结果并输出
echo $res['id'].$res[...];
}catch(PDOException $e){
die ("Error:".$e->getMessage()."<br>");
}
$pdo = NULL; //释放连接
fetchAll方法
array PSOStatement::fetchAll([int fetch_style[,int column_index]]);
fetch_style:同fetch()方法中的fetch_style
column_index:字段的索引
返回一个包含结果集所有数据的二维数组,例如:$res[$i][‘id’]、$res[$i][…]等
fetchColumn方法
string PDOStatement::fetchColumn([int column_num]);
column_num:设置行中列的索引值,从0开始,若省略该参数,则从第一列开始取值。
返回值 :结果集中下一行中的指定列的值