数据库抽象层PDO(PHP Date Object 缩写)
通过一致的函数执行查询和获取数据,简化数据库操作,屏蔽不同数据库之间的差异,方便移植。
PDO安装
一定确保php配置文件中激活了扩展模块,编辑php.ini文件
extension=php_pdo.dll //所有PDO 驱动程序共享的扩展,必须有
//使用什么数据看就激活哪一个
extention=php_pdo_mysql.dll //MySQL
extention=php_pdo_odbc.dll //ODBC
extention=php_pdo_mssql.dll //SQL Server
extention=php_pdo_oci.dll //Oracle
重启web服务器,使用phpinfo() 函数 查看
创建PDO对象
方法一:
将参数嵌入到构造函数中
例
<?php
$dsn ='mysql:host=localhost;dbname=bookstore';//注:之间不要有多余的空格
$user = 'root';
$password = '1234567';
try {
$dbh = new PDO($dsn,$user,$password);
echo '连接成功!'.'<br>';
} catch (PDOException $e) {
echo '连接数据库失败:'.$e->getMessage().'<br>';
exit();
}
?>
方法二:
将参数存放在文件中
方法三:
引用php.ini 文件
使用持久连接时,PHP会把MySQL服务器的一个进程创建的新旧两个连接合并共享为一个连接
使用PDO对象
getAttribute() //获取一个数据库连接对象的属性
setAttribute() //为一个数据库连接对象设定属性
使用PDO执行SQL语句
1.使用PDO::exec() 方法
可执行insert 、update 和 delete 等
<?php
$dsn ='mysql:host=localhost;dbname=bookstore';//注:之间不要有多余的空格
$user = 'root';
$password = '1234567';
try {
$dbh = new PDO($dsn,$user,$password);
echo '连接成功!'.'<br>';
} catch (PDOException $e) {
echo '连接数据库失败:'.$e->getMessage().'<br>';
exit();
}
<span style="white-space:pre"> </span>$insertdata = "insert into books (bookName,publisher,price) values ('计算机网络','电子工业出版社','28')";
$affected = $dbh->exec($insertdata);
if ($affected) {
echo '数据表book受影响的行数为:'.$affected.'<br>';
}else{
print_r($dbh->errorInfo());
}
?>
2.使用PDO::query() 方法
返回一个PDOstatement 对象,可使用对象中的rowCount() 方法影响到的行数
<?php
//数据库抽象层PDO (PHP Data Object)
$dsn ='mysql:host=localhost;dbname=bookstore';
$user = 'root';
$password = '1234567';
try {
$dbh = new PDO($dsn,$user,$password);
echo '连接成功!'.'<br>';
} catch (PDOException $e) {
echo '连接数据库失败:'.$e->getMessage().'<br>';
exit();
}
<span style="white-space:pre"> </span>//使用PDO::query()方法
$selectdata = "select bookName,publisher,price from books where publisher='电子工业出版社'";
try{
$pdostatement = $dbh->query($selectdata);
echo '一共从表中获取到'.$pdostatement->rowCount().'条记录:<br>';
foreach ($pdostatement as $row) {
echo $row['bookName']."\t";
echo $row['publisher']."\t";
echo $row['price']."\t";
echo '<br>';
}
}catch (PDOException $e){
echo $e.getMessage();
print_r($dbh->errorInfo());
}
?>
3.PDO预处理语句
在PDO中有两种占位符的语法:“命名参数”和“问号参数”
命名参数:
$query = "insert into books (bookName,publisher,price) values (:bookname,:bookpublisher,:bookprice)";
$stmt = $dbh->prepare($query);
$stmt = $dbh->prepare($query);
问号参数:
$query = "insert into books (bookName,publisher,price) values (?,?,?)";
$stmt = $dbh->prepare($query);
$stmt = $dbh->prepare($query);
绑定参数bindParam()
把参数绑定到准备好的语句的占位符上
$bookName = "div+css";
$publisher = "机械电子出版社";
$price = 66;
//绑定参数
echo '绑定参数'.'<br>';
$stmt->bindParam(':bookName',$bookName,PDO::PARAM_STR);
$stmt->bindParam(':bookpublisher',$publisher,PDO::PARAM_STR);
$stmt->bindParam(':bookprice ',$price ,PDO::PARAM_STR);
$publisher = "机械电子出版社";
$price = 66;
//绑定参数
echo '绑定参数'.'<br>';
$stmt->bindParam(':bookName',$bookName,PDO::PARAM_STR);
$stmt->bindParam(':bookpublisher',$publisher,PDO::PARAM_STR);
$stmt->bindParam(':bookprice ',$price ,PDO::PARAM_STR);
执行准备好的查询
$stmt->execute();
4.获取数据
fetch() 获取当前行记录
fetchAll() 获取整个结果集
setFetchMode() 方法 设置fetch()和fetchAll()方法以什么方式返回结果集
bindColumn() 方法 将一个列和一个指定的变量名绑定