一、php,ini文件配置
要启用PDO,首先必须加载"extension=php_pdo.dll",如果想其支持某个具体的数据库,那么还要加载对应的数据库选项。如支持MySQL数据库,则还需要加载"extension=php_pdo_mysql.dll"。
二、PDO构造函数
语法:_construct(string $dsn[, string $username[, string $password[, array $driver_options]]])
参数:
- dsn:数据源名称,包括主机名端口号和数据库名称
- username:连接数据库的用户名
- password:连接数据库的密码
- driver_options:连接数据库的其他选项
header("content-type:text/html;charset=utf8");
$dbms="mysql";
$dbName="db_database";
$user="root";
$pwd="";
$host="localhost";
$dsn="$dbms:host=$host;dbname=$dbName";
try{
$pdo=new PDO($dsn, $user, $pwd);
echo "PDO连接MySQL成功。";
}catch(Exception $e){
echo $e->getMessage()."<br>";
}
三、PDO中执行SQL语句
1. exec() 方法
语法:int PDO::exec(string statement)
参数:statement是要执行的SQL语句。该方法返回执行SQL语句时受影响的行数,通常用于INSERT、DELETE和UPDATE语句中。
2. query() 方法
语法:PDOStatement PDO::query(string statement)
参数:statement是要执行的SQL语句。它返回的是一个PDOStatement对象
3. 预处理语句--prepare()和execute()
预处理语句包括prepare()和execute()两种方法。首先通过prepare()方法做查询的准备工作,然后,通过execute()方法执行查询。同时还可以通过bindParam()方法来绑定参数提供给execute()方法。
语法:PDOStatement PDO::prepare(string statement[, array driver_options])
bool PDOStatement::execute([array input_parameters])
4. PDO中获取结果集
- fetch()方法:获取结果集中的下一行数据
语法:mixed PDOStatement::fetch([int fetch_style[, int cursor_orientation[, int cuisor_offset]]])
参数:
值 | 说明 |
PDO::FETCH_ASSOC | 关联数组形式 |
PDO::FETCH_NUM | 数组索引数组形式 |
PDO::FETCH_BOTH | 两者数组形式都有,这是默认的 |
PDO::FETCH_OBJ | 按照对象的形式,类似于以前的mysql_fetch_object() |
PDO::FETCH_BOUND | 以布尔值的形式返回结果,同时将获取的列赋值给bindParam()方法 |
PDO::FETCH_LAZY | 以关联数组、数字索引数组和对象3中形式返回结果 |
cursor_orientation:PDOStatement对象的一个滚动游标,用于获取指定的一行
cursor_offset:游标的偏移量
//初始化一个PDO对象
$pdo=new PDO($dsn, $user, $pwd);
$query = "select * from database";
$result = $pdo->prepare($query);
$result->execute();
while($res=$result->fetch(PDO::FETch_ASSOC)){
...
}
- fetchAll() 方法:获取结果集中的所有行,返回值是一个包含结果集中所有数据的二维数组。
语法:array PDOStatement::fetchAll(int fetch_style[, int column_index]])
参数:fetch_style,控制结果集中数据的返回方式
column_index,字段的索引
- fetchColunm() 方法,获取结果集中下一行指定列的值
语法:string PDOStatement::fetchColumn([int column_number])
参数:column_number设置行中列的索引值,该值从0开始,如果删除该值则从第一列开始取值。
四、PDO中捕获SQL语句中的错误
1. 使用默认模式--PDO::ERRMODE_SILENT
在默认模式中设置PDOStatement对象的errorCode属性,但不进行其他任何操作。
通过prepare() 和 execute() 方法向数据库中添加数据,设置PDOStatement对象的errorCode属性,手动检测代码中的错误。
2. 使用警告模式-- PDO::ERRMODE_WARNING
警告模式会产生一个PHP警告,并设置errorCode属性。如果设置的是警告模式,那么除非明确地检测错误代码,否则程序将继续按照其方式运行。
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
3. 使用异常模式-- PDO::ERRMODE_EXCEPTION
异常模式会创建一个PDOException,并设置errorCode属性。它可以将执行代码封装到一个try{...}catch{...}语句块中。
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION)
五、PDO中错误处理
1. errorCode() 方法,获取操作数据库句柄时所发生的错误代码,这些错误代码被称为SQLSTATE代码。返回一个SQLSTATE代码,是由5个数字和字母组成的。
语法:int PDOStatement::errorCode(void);
2. errorInfo() 方法,用于获取操作数据库句柄时所发生的错误信息。返回值为一个数组,她包含了相关的错误信息。
语法:array PDOStatement::errorInfo(void);
六、PDO中事务处理
1. 开启事务- beginTransaction() 方法
beginTransaction()方法将关闭自动提交(autocommit)模式,知道事务提交或者回滚以后才恢复。、
2. 提交事务 - commit() 方法
commit() 方法完成事务的提交操作,成功返回true,否则返回false。
3. 事务回滚 - rollBack() 方法
rollBack() 方法执行事务的回滚操作。