PHP Data Object (PHP 数据对象)
数据库访问抽象层
用于统一各种数据库的访问接口
PDO特性:
1.配置PHP.ini文件,开启相应扩展
extension = php_pdo.dll
2.开启对相应数据库的扩展
extension=php_pdo_mysql.dll
3.通过查看phpinfo查看PDO扩展的详细信息
配置完后需要重启PHP-FPM让其重新加载配置文件和生效
service php-fpm restart
通过配置文件连接数据库
通过参数的形式连接数据库
<?php //通过参数形式连接数据库 try{ //dsn 即data source name 数据源 $dsn='mysql:host=localhost;dbname=test'; $username='root'; $passwd='root'; $pdo=new PDO($dsn, $username, $passwd); var_dump($pdo); }catch(PDOException $e){ echo $e->getMessage(); }
通过uri的形式连接数据库
<?php //通过uri的形式连接数据库 try{ $dsn='uri:file://H:\wamp\PHPnow-1.5.6.1428396605\htdocs\pdo\dsn.txt'; $username='root'; $passwd='root'; $pdo=new PDO($dsn,$username,$passwd); var_dump($pdo); }catch(PDOException $e){ echo $e->getMessage(); }
dsn.txt
mysql:dbname=test;host=localhost
通过配置文件连接数据库
先在php.ini中配置,然后重启apache加载配置,如下所示
[PHP]
;在php.ini中配置,然后重启apache加载配置
pdo.dsn.test="mysql:host=localhost;dbname=test"
;;;;;;;;;;;;;;;;;;;
; About php.ini ;
;;;;;;;;;;;;;;;;;;;
通过配置文件链接数据库
<?php /** *通过配置文件链接数据库 *在php.ini中配置,然后重启apache加载配置 */ try{ $dsn='test'; $username='root'; $passwd='root'; $pdo=new PDO($dsn,$username,$passwd); var_dump($pdo); }catch(PDOException $e){ echo $e->getMessage(); }
exec()方法执行建表操作并插入一条记录
<?php
try{
$pdo=new PDO('mysql:host=localhost;dbname=test','root','root');
//exec():执行一条sql语句并返回其受影响的记录的条数,如果没有受影响的记录,他返回0
//exec对于select没有作用
$sql=<<<EOF
CREATE TABLE IF NOT EXISTS user(
id INT(10) UNSIGNED AUTO_INCREMENT KEY,
username VARCHAR(20) NOT NULL UNIQUE,
password CHAR(32) NOT NULL,
email VARCHAR(30) NOT NULL
);
EOF;
$res=$pdo->exec($sql);
var_dump($res);
$sql='INSERT user(username,password,email) VALUES("king","'.md5('king').'","[email protected]")';
//echo $sql;
$res=$pdo->exec($sql);
echo $res;
}catch(PDOException $e){
echo $e->getMessage();
}
lastInsertId得到最后一次插入记录的id
<?php header('content-type:text/html;charset=utf-8'); try{ $pdo=new PDO('mysql:host=localhost;dbname=test','root','root'); //exec():执行一条sql语句并返回其受影响的记录的条数,如果没有受影响的记录,他返回0 //exec对于select没有作用 //插入多条记录 // $sql=<<<EOF // INSERT user(username,password,email) VALUES("king1","king1","[email protected]"), // ("king2","king2","[email protected]"), // ("king3","king2","[email protected]") // //EOF; //echo $sql; $sql='INSERT user(username,password,email) VALUES("king6","king6","[email protected]")'; $res=$pdo->exec($sql); echo '受影响的记录的条数为:'.$res,'<br/>'; //$pdo->lastInsertId():得到新插入记录的ID号 echo '最后插入的ID号为'.$pdo->lastInsertId(); if(!$res) throw new PDOException("<br/>插入数据失败"); }catch(PDOException $e){ echo $e->getMessage(); }
exec()方法执行其他操作,exec()方法不能用于查询
<?php
header('content-type:text/html;charset=utf-8');
try{
$pdo=new PDO('mysql:host=localhost;dbname=test','root','root');
//$sql='update user set username="king" where id=1';
//$sql='delete from userwhere id=1';
$sql='select * from user';
$res=$pdo->exec($sql);
//echo $res.'条记录被影响';
var_dump($res);
// echo '<hr/>';
// echo $pdo->lastInsertId();
}catch(PDOException $e){
echo $e->getMessage();
}
errorCode()和errorInfo()查看错误信息
<?php
header('content-type:text/html;charset=utf-8');
try{
$pdo=new PDO('mysql:host=localhost;dbname=test','root','root');
$sql='delete from user12 where id=1';
$res=$pdo->exec($sql);
//echo $res.'条记录被影响';
//var_dump($res);
if($res===false){
//$pdo->errorCode():SQLSTATE的值
echo $pdo->errorCode();
echo '<hr/>';
//$pdo->errorInfo():返回的错误信息的数组,数组中包含3个单元
//0=>SQLSTATE,1=>CODE,2=>INFO
$errInfo=$pdo->errorInfo();
print_r($errInfo);
}
// echo '<hr/>';
// echo $pdo->lastInsertId();
}catch(PDOException $e){
echo $e->getMessage();
}
query()方法执行查询语句
<?php
header('content-type:text/html;charset=utf-8');
try{
$pdo=new PDO('mysql:host=localhost;dbname=test','root','root');
//$sql='select * from user where id=2';
$sql='select id,username,email from user';
//$pdo->query($sql),执行SQL语句,返回PDOStatement对象
$stmt=$pdo->query($sql);
var_dump($stmt);
echo '<hr/>';
foreach($stmt as $row){
//print_r($row);
echo '编号:'.$row['id'],'<br/>';
echo '用户名:'.$row['username'],'<br/>';
echo '邮箱:'.$row['email'],'<br/>';
echo '<hr/>';
}
}catch(PDOException $e){
echo $e->getMessage();
}
query()方法执行插入语句,建议用exec()方法
<?php header('content-type:text/html;charset=utf-8'); try{ $pdo=new PDO('mysql:host=localhost;dbname=imooc','root','root'); $sql='INSERT user(username,password,email) VALUES("king11","'.md5('king11').'","[email protected]")'; $stmt=$pdo->query($sql); var_dump($stmt); }catch(PDOException $e){ echo $e->getMessage(); }
prepare()和execute()执行查询语句
fetch()方法使用
<?php
header('content-type:text/html;charset=utf-8');
try{
$pdo=new PDO('mysql:host=localhost;dbname=test','root','root');
$sql='select * from user where username="king11"';
//prepare($sql):准备SQL语句
$stmt=$pdo->prepare($sql);
//execute():执行预处理语句
$res=$stmt->execute();
//var_dump($res);
//fetch():得到结果集中的一条记录
$row=$stmt->fetch();
print_r($row);
//var_dump($stmt);
}catch(PDOException $e){
echo $e->getMessage();
}
setFetchMode()方法和fetchAll()方法使用
<?php
header('content-type:text/html;charset=utf-8');
try{
$pdo=new PDO('mysql:host=localhost;dbname=test','root','root');
$sql='select * from user';
$stmt=$pdo->prepare($sql);
$res=$stmt->execute();
// if($res){
// while($row=$stmt->fetch(PDO::FETCH_OBJ)){
// print_r($row);
// echo '<hr/>';
// }
// }
// $rows=$stmt->fetchAll(PDO::FETCH_ASSOC);
// print_r($rows);
echo '<hr/>';
$stmt->setFetchMode(PDO::FETCH_ASSOC); //设置返回结果集的模式
//var_dump($stmt);
$rows=$stmt->fetchAll();
print_r($rows);
}catch(PDOException $e){
echo $e->getMessage();
}
设置数据库连接属性
<?php
/** *getAttribute() 检索一个语句属性 *setAttribute()设置一个语句属性 */
header('content-type:text/html;charset=utf-8');
try{
$dsn='mysql:host=localhost;dbname=test';
$username='root';
$passwd='root';
$pdo=new PDO($dsn, $username, $passwd);
echo '自动提交:'.$pdo->getAttribute(PDO::ATTR_AUTOCOMMIT);
echo '<br/>';
echo 'PDO默认的错误处理模式:'.$pdo->getAttribute(PDO::ATTR_ERRMODE);
$pdo->setAttribute(PDO::ATTR_AUTOCOMMIT, 0);
echo '<br/>';
echo '自动提交:'.$pdo->getAttribute(PDO::ATTR_AUTOCOMMIT);
}catch(PDOException $e){
echo $e->getMessage();
}
批量获取PDO属性
<?php /** *批量获取PDO属性 */ header('content-type:text/html;charset=utf-8'); try{ $dsn='mysql:host=localhost;dbname=test'; $username='root'; $passwd='root'; $pdo=new PDO($dsn, $username, $passwd); $attrArr=array( 'AUTOCOMMIT','ERRMODE','CASE','PERSISTENT','TIMEOUT','ORACLE_NULLS', 'SERVER_INFO','SERVER_VERSION','CLIENT_VERSION','CONNECTION_STATUS' ); foreach($attrArr as $attr){ echo "PDO::ATTR_$attr: "; echo $pdo->getAttribute(constant("PDO::ATTR_$attr")),'<br/>'; } }catch(PDOException $e){ echo $e->getMessage(); }
<?php
header('content-type:text/html;charset=utf-8');
try{
$dsn='mysql:host=localhost;dbname=imooc';
$username='root';
$passwd='root';
$options=array(PDO::ATTR_AUTOCOMMIT=>0,PDO::ATTR_ERRMODE=>PDO::ERRMODE_EXCEPTION);
$pdo=new PDO($dsn, $username, $passwd, $options);
echo $pdo->getAttribute(PDO::ATTR_AUTOCOMMIT);
echo '<br/>';
echo $pdo->getAttribute(PDO::ATTR_ERRMODE);
}catch(PDOException $e){
echo $e->getMessage();
}