1.PDO简介
PDO(PHP Data Object) 是PHP 5 中加入的东西,是PHP 5新加入的一个重大功能,因为在PHP 5以前的php4/php3都是一堆的数据库扩展来跟各个数据库的连接和处理,什么 php_mysql.dll、php_pgsql.dll、php_mssql.dll、php_sqlite.dll等等。
PHP6中也将默认使用PDO的方式连接,mysql扩展将被作为辅助
2.PDO配置
PHP.ini中,去掉"extension=php_pdo.dll"前面的";"号,若要连接数据库,还需要去掉与PDO相关的数据库扩展前面的";"号,然后重启Apache服务器即可。
extension=php_pdo.dll
extension=php_pdo_mysql.dll
extension=php_pdo_pgsql.dll
extension=php_pdo_sqlite.dll
extension=php_pdo_mssql.dll
extension=php_pdo_odbc.dll
extension=php_pdo_firebird.dll
......
3.PDO连接mysql数据库
new PDO("mysql:host=localhost;dbname=db_demo","root","");
默认不是长连接,若要使用数据库长连接,需要在最后加如下参数:
new PDO("mysql:host=localhost;dbname=db_demo","root","","array(PDO::ATTR_PERSISTENT => true) ");
4.PDO常用方法及其应用
PDO::query() 主要是用于有记录结果返回的操作,特别是SELECT操作
PDO::exec() 主要是针对没有结果集合返回的操作,如INSERT、UPDATE等操作
PDO::lastInsertId() 返回上次插入操作,主键列类型是自增的最后的自增ID
PDOStatement::fetch() 是用来获取一条记录
PDOStatement::fetchAll() 是获取所有记录集到一个中
5.PDO操作MYSQL数据库实例
复制代码 代码如下:
<?php
$pdo = new PDO("mysql:host=localhost;dbname=db_demo","root","");
if($pdo -> exec("insert into db_demo(name,content) values('title','content')")){
echo "插入成功!";
echo $pdo -> lastinsertid();
}
?>
复制代码 代码如下:
<?php
$pdo = new PDO("mysql:host=localhost;dbname=db_demo","root","");
$rs = $pdo -> query("select * from test");
while($row = $rs -> fetch()){
print_r($row);
}
?>
为什么要讲PDO:
(1)市面上使用最多的,大部分企业使用PDO
(2)Mysqli 只支持MySQL数据库,PDO支持大部分数据库
(3)以后做的项目都是使用PDO作为数据库抽象层来实现的
mysqli------是mysql数据库的加强:
(预处理机制)
(错误处理机制)
(采用了面向对象的编程模式)
一、PHP如何操作数据库
与具体数据库的扩展:php想操作那个数据库,需要开启这个数据库的扩展,提供操作这个数据库的函数
二、什么是PDO
PDO是一个mysql官方封装的,基于面向对象编程思想的,使用C语言开发的数据库抽象层
三、PDO数据库抽象的概念:
PDO抽象类
它是封装的一个类,就是一个控制数据库的新的操作方法
将具体的操作数据库的代码封装到数据库抽象层,如果出项数据库转移,只需在php代码里高速数据库抽象层,你去使用哪一个数据库就可以了
通过代码引出PDO
<?php
//写一个函数,根据传递的参数来操作不同的数据库
function mysql_db($type){
if($type=='mysql'){
mysql_connect();
mysql_select_db();
}elseif ($type=='mssql'){
mssql_connect();
mssql_query();
}elseif ($type=='oracle'){
// 具体操作某个数据库的函数
}
}
mysql_db('mysql');
function mysql_q($type,$sql){
if($type=='mysql'){
mysql_query($sql);
}
}
?>
一、 如何使用PDO
和当前使用mysql非常像
要想使用mysql需要开启mysql扩展,
需想使用PDO,需要开启PDO扩展
获得PDO对象,调用方法
(1)要开启pdo驱动
Extension = php_pdo.dll
Extension = php_pdo_sqlite.dll
Extension = php_pdo_mysql.dll
开启这个扩展(驱动),就可以使用这个扩展给我们提供类了
(2)使用这个类,实例化这个类,调用属性和方法
<?php
//使用PDO操作数据库
//第一个参数:连接数据库的类型:主机名;数据库名
$dsc = 'mysql:host=localhost;dbname=mysql_text';
$user = 'root';
$pass = '123';
$pdo = new PDO($dsc,$user,$pass);//实例化一个类的时候,会自动的先调用__construct()构造函数
//var_dump($pdo);
//执行sql语句获得
$sql = 'select*fromgoods';
$result = $pdo->query($sql);//query方法返回的是PDOStatement对象
//如果想获得具体的数据,需要调用对象的方法:fetchAll();参数是类常量,表示返回什么样的数据
$rows = $result->fetchAll(PDO::FETCH_BOTH);
//var_dump($rows);
//更新数据库的操作
$sql = 'update goods set goods_name="lalala" wheregoods_id=3';
//执行增删改的语句,exec()方法,执行查询的语句 query()
//exec()返回受影响的函数 query()返回PDOStatement对象
$nums = $pdo->exec($sql);
var_dump($nums);
?>
二、 PDO预编译机制
先将sql语句的数据部分和费数据部分分离开————》将不带数据的部分预编译一下prepare()————》在编译结果上绑定数据bandparam()————》执行编译结果execute()
预编译的好处:1、减少了编译的字符数,编译的速度提高
2、如果再次执行同样的sql语句,直接绑定数据,减少编译sql语句时间
写代码实现PDO的预编译(与处理机制)
<?php
//预编译:PDO::prepare($sql); 返回PDOStatement对象
//绑定数据PDOStamentt->bindParam(); 给预编译的结果绑定数据
//执行编译结果 PDOStament->execute();
//使用PDO操作数据库
//第一个参数:连接数据库的类型:主机名;数据库名
$dsn = 'mysql:host=localhost;dbname=mysql_text';
$user = 'root';
$pass = '123';
$pdo = new PDO($dsn,$user,$pass);
//var_dump($pdo);
//预编译:prepare();参数是不带数据的sql语句
//先将sql语句中的数据部分用占位符代替 :占位符名称
$sql = 'insert intogoods values(null,:name,:price,:number)';
$smt = $pdo->prepare($sql); //返回一个PDOStament 对象
//绑定数据 PDOStament对象的bindParam()来绑定参数:占位符,实际数据
$goods_name= 'surface';
$goods_price= '3500';
$goods_num= '41';
$smt->bindParam(':name',$goods_name);
$smt->bindParam(':price',$goods_price);
$smt->bindParam(':number',$goods_num);
$smt->execute();
?>
三、 PDO的错误处理机制:
(1)静默模式
默认情况下与mysql处理方式一致,不现实错误信息(静默模式)但是我们可以通过固定的方法获得错误信息
(2)警告模式
//更改属性设置错误处理模式
$pdo ->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_WARNING);
(3)异常模式,当发生错误时,抛出一个异常
$pdo ->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
$sql = 'select*fromgood';
try {
//尝试可能会处错误的代码
$pdo ->query($sql);
}catch (PDOException $e){
//现在捕获异常后,自己看着办,是让他显示出来呢,还是输出到日志文件里呢?
//通常是将错误信息输出到日志文件里
var_dump($e->getMessage());
file_put_contents('D://mysql.log',$e->getMessage());
}
PDO(PHP Data Object) 是PHP 5 中加入的东西,是PHP 5新加入的一个重大功能,因为在PHP 5以前的php4/php3都是一堆的数据库扩展来跟各个数据库的连接和处理,什么 php_mysql.dll、php_pgsql.dll、php_mssql.dll、php_sqlite.dll等等。
PHP6中也将默认使用PDO的方式连接,mysql扩展将被作为辅助
2.PDO配置
PHP.ini中,去掉"extension=php_pdo.dll"前面的";"号,若要连接数据库,还需要去掉与PDO相关的数据库扩展前面的";"号,然后重启Apache服务器即可。
extension=php_pdo.dll
extension=php_pdo_mysql.dll
extension=php_pdo_pgsql.dll
extension=php_pdo_sqlite.dll
extension=php_pdo_mssql.dll
extension=php_pdo_odbc.dll
extension=php_pdo_firebird.dll
......
3.PDO连接mysql数据库
new PDO("mysql:host=localhost;dbname=db_demo","root","");
默认不是长连接,若要使用数据库长连接,需要在最后加如下参数:
new PDO("mysql:host=localhost;dbname=db_demo","root","","array(PDO::ATTR_PERSISTENT => true) ");
4.PDO常用方法及其应用
PDO::query() 主要是用于有记录结果返回的操作,特别是SELECT操作
PDO::exec() 主要是针对没有结果集合返回的操作,如INSERT、UPDATE等操作
PDO::lastInsertId() 返回上次插入操作,主键列类型是自增的最后的自增ID
PDOStatement::fetch() 是用来获取一条记录
PDOStatement::fetchAll() 是获取所有记录集到一个中
5.PDO操作MYSQL数据库实例
复制代码 代码如下:
<?php
$pdo = new PDO("mysql:host=localhost;dbname=db_demo","root","");
if($pdo -> exec("insert into db_demo(name,content) values('title','content')")){
echo "插入成功!";
echo $pdo -> lastinsertid();
}
?>
复制代码 代码如下:
<?php
$pdo = new PDO("mysql:host=localhost;dbname=db_demo","root","");
$rs = $pdo -> query("select * from test");
while($row = $rs -> fetch()){
print_r($row);
}
?>
为什么要讲PDO:
(1)市面上使用最多的,大部分企业使用PDO
(2)Mysqli 只支持MySQL数据库,PDO支持大部分数据库
(3)以后做的项目都是使用PDO作为数据库抽象层来实现的
mysqli------是mysql数据库的加强:
(预处理机制)
(错误处理机制)
(采用了面向对象的编程模式)
一、PHP如何操作数据库
与具体数据库的扩展:php想操作那个数据库,需要开启这个数据库的扩展,提供操作这个数据库的函数
二、什么是PDO
PDO是一个mysql官方封装的,基于面向对象编程思想的,使用C语言开发的数据库抽象层
三、PDO数据库抽象的概念:
PDO抽象类
它是封装的一个类,就是一个控制数据库的新的操作方法
将具体的操作数据库的代码封装到数据库抽象层,如果出项数据库转移,只需在php代码里高速数据库抽象层,你去使用哪一个数据库就可以了
通过代码引出PDO
<?php
//写一个函数,根据传递的参数来操作不同的数据库
function mysql_db($type){
if($type=='mysql'){
mysql_connect();
mysql_select_db();
}elseif ($type=='mssql'){
mssql_connect();
mssql_query();
}elseif ($type=='oracle'){
// 具体操作某个数据库的函数
}
}
mysql_db('mysql');
function mysql_q($type,$sql){
if($type=='mysql'){
mysql_query($sql);
}
}
?>
一、 如何使用PDO
和当前使用mysql非常像
要想使用mysql需要开启mysql扩展,
需想使用PDO,需要开启PDO扩展
获得PDO对象,调用方法
(1)要开启pdo驱动
Extension = php_pdo.dll
Extension = php_pdo_sqlite.dll
Extension = php_pdo_mysql.dll
开启这个扩展(驱动),就可以使用这个扩展给我们提供类了
(2)使用这个类,实例化这个类,调用属性和方法
<?php
//使用PDO操作数据库
//第一个参数:连接数据库的类型:主机名;数据库名
$dsc = 'mysql:host=localhost;dbname=mysql_text';
$user = 'root';
$pass = '123';
$pdo = new PDO($dsc,$user,$pass);//实例化一个类的时候,会自动的先调用__construct()构造函数
//var_dump($pdo);
//执行sql语句获得
$sql = 'select*fromgoods';
$result = $pdo->query($sql);//query方法返回的是PDOStatement对象
//如果想获得具体的数据,需要调用对象的方法:fetchAll();参数是类常量,表示返回什么样的数据
$rows = $result->fetchAll(PDO::FETCH_BOTH);
//var_dump($rows);
//更新数据库的操作
$sql = 'update goods set goods_name="lalala" wheregoods_id=3';
//执行增删改的语句,exec()方法,执行查询的语句 query()
//exec()返回受影响的函数 query()返回PDOStatement对象
$nums = $pdo->exec($sql);
var_dump($nums);
?>
二、 PDO预编译机制
先将sql语句的数据部分和费数据部分分离开————》将不带数据的部分预编译一下prepare()————》在编译结果上绑定数据bandparam()————》执行编译结果execute()
预编译的好处:1、减少了编译的字符数,编译的速度提高
2、如果再次执行同样的sql语句,直接绑定数据,减少编译sql语句时间
写代码实现PDO的预编译(与处理机制)
<?php
//预编译:PDO::prepare($sql); 返回PDOStatement对象
//绑定数据PDOStamentt->bindParam(); 给预编译的结果绑定数据
//执行编译结果 PDOStament->execute();
//使用PDO操作数据库
//第一个参数:连接数据库的类型:主机名;数据库名
$dsn = 'mysql:host=localhost;dbname=mysql_text';
$user = 'root';
$pass = '123';
$pdo = new PDO($dsn,$user,$pass);
//var_dump($pdo);
//预编译:prepare();参数是不带数据的sql语句
//先将sql语句中的数据部分用占位符代替 :占位符名称
$sql = 'insert intogoods values(null,:name,:price,:number)';
$smt = $pdo->prepare($sql); //返回一个PDOStament 对象
//绑定数据 PDOStament对象的bindParam()来绑定参数:占位符,实际数据
$goods_name= 'surface';
$goods_price= '3500';
$goods_num= '41';
$smt->bindParam(':name',$goods_name);
$smt->bindParam(':price',$goods_price);
$smt->bindParam(':number',$goods_num);
$smt->execute();
?>
三、 PDO的错误处理机制:
(1)静默模式
默认情况下与mysql处理方式一致,不现实错误信息(静默模式)但是我们可以通过固定的方法获得错误信息
(2)警告模式
//更改属性设置错误处理模式
$pdo ->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_WARNING);
(3)异常模式,当发生错误时,抛出一个异常
$pdo ->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
$sql = 'select*fromgood';
try {
//尝试可能会处错误的代码
$pdo ->query($sql);
}catch (PDOException $e){
//现在捕获异常后,自己看着办,是让他显示出来呢,还是输出到日志文件里呢?
//通常是将错误信息输出到日志文件里
var_dump($e->getMessage());
file_put_contents('D://mysql.log',$e->getMessage());
}