PHP-PDO数据对象

2025-11-12 01:12:18

1、1.

PDO: PHP  Data  Object:PHP数据对象

到底是什么?

它是“别人”写的类似我们自己写的MySQLDB工具类!

即,它的作用也是:

1),连接数据库;

2),执行增删改语句;

3),执行查询语句:可以分为3中:查多行,查一行,查一个

但,PDO功能强大:

1),可以连接很多种数据库。

2),几乎能完成数据库的各种操作:各种增删改查,以及事务。。。。

不过,在php语言配置领域,其实PDO的结构类似这样:

PHP-PDO数据对象

2、2.比如(示意性代码):

$p = new  pdo( 连接某种数据库的参数信息 );

$re1 = $p->exec( ‘insert / update / delete ........’) //返回“受影响的行数”或false

$re2 = $p->query(‘select / desc / show .....’);  //返回“pdo结果集对象”或false

其中,各种不同数据库的“引擎”,需要到php.ini中的打开相应的“模块”,比如:

PHP-PDO数据对象

3、3.连接数据库的参数信息

包括:

数据库类型:比如mysql,mssql,oracle

地址:比如localhost

端口:比如3306

用户名:

密码:

数据库名:

连接编码名:

举例:

PHP-PDO数据对象

4、4.结果为:

PHP-PDO数据对象

1、1.模式1:默认模式(常规错误模式)

比如,pdo对象执行如下“错误sql语句”,

$re1  =  $pdo->exec(“ deleteeee  from  XXX   where  id = 12” );

则根据我们之前对pdo的了解,此时返回的是false——表示执行错误。

但此时,有怎么对其进行“错误处理”。

我们来对比之前的纯mysql函数:

$sql  =  “deleteddddd   from  YYYY  where  id  =  12”;

$result  =  mysql_query( $sql );

if(  $result  ===  false ){ //错误时的处理:

echo  “发生错误:”  .  mysql_error();

}

else{

//正确时 。。。。

}

那么,pdo的错误处理,默认跟该形式几乎一样!

类似这样:

if(  $re1===  false ){ //错误时的处理:

echo  “错误代号:”  .  $pdo->errorcode();  //errorcode()就是一个数字(代号)

echo  “错误信息:”  .  $pdo->errorinfo();  //errorinfo()的结果是一个数组!

//实际应该这样:

$err = $pdo->errorinfo();

echo  “错误信息:”  .  $err[2];

}

else{

//正确时 。。。。

}

PHP-PDO数据对象

2、2.模式2:异常模式

什么叫做异常?异常就是不正常。对编程的人来说,凡是“超出程序员的逻辑预计”的结果,都是异常

——其实,异常,就是“错误”的另一个说法——是在面向对象领域的说法。

因为,一个错误发生,其实也可以说生成了一个“异常对象”——系统内部有一个“异常类”。

要想pdo发生错误时,以异常模式进行处理,得先“设置”pdo错误处理模式为“异常模式”,如下:

$pdo->setAttribute(PDO::ATTR_ERRMODE,  PDO::ERRMODE_EXCEPTION);

然后,异常模式的处理语法为:

try{

$re1 = $pdo->query( “sql语句”);

var_dump($re1);

}

catch(  PDOEXCEPTION  $e  ){ //PDOEXCEPTION是一个“内部类”,表示pdo的异常类

//$e是一个该类的对象。

echo “发生错误:”

echo  “错误代号”  .  $e->getcode() ;

echo “错误内容”   .  $e->getmessage();

}

PHP-PDO数据对象

3、3.结果为:

PHP-PDO数据对象

1、1.pdo对象:

创建该对象: $pdo = new  pdo(........);

调用(执行)该对象的一些方法:

$pdo->exec(),  $pdo->query(),  $pdo->lastinserted(),  $pdo->begintransaction(),

$pdo->errorcode(), ........

pdo结果集对象:

创建该对象:

$stmt  =  $pdo->query(“查询语句”); //执行成功的时候,

调用(执行)该对象的一些方法:

$result ->方法名()

主要有:

$stmt->rowCount() :获得结果集的行数

$stmt->columnCount() ;获得结果集的列数

$stmt->fetch( [返回类型] ):返回一行数据,是一个一维数组//返回类型常用的有:PDO::FETCH_ASSOC:表示关联数组PDO::FETCH_NUM:表示索引数组PDO::FETCH_BOTH:表示前二者皆有,这是默认值PDO::FETCH_OBJ:表示对象

$stmt->fetchAll([返回类型]);返回多行数据,是一个二维数组

$stmt->fetchColumn( [$i] );返回单个数据,是一个标量数据,其中$i表示第几个字段上的值,可以省略,表示0,即取“第一个字段”的值。

$stmt->errorCode();错误代号

$stmt->errorInfo();错误信息

$stmt->closeCursor();关闭资源

举例(取一行):

PHP-PDO数据对象

2、2.取多行:

PHP-PDO数据对象

1、pdo的结果集对象就是:$stmt  =  $pdo->query(“sql语句”);

所谓预处理语法,其实就是该“sql语句”中,有的部分并没有给出该有的数据,而是在后面再给。

比如:

$sql1  =  “select  *  from  user_list  where  id > ?  and  age  <  ?”; //2个问号,就是“未定数据”

或:

$sql2  =  “insert  into  XXX( id,  age,  name,  edu)values( null,  ? ,  ?,  ? )”;//有3个未定数据

则这种语句,就称为“预处理语句”(语法),其执行过程是这样的:

1,第1步:

$stmt  =  $pdo->prepare( $sql1 ); //得到“预处理结果集”,其实此时并没有实际数据,

//实际上,该语句目前并没有执行,而只是“预先编译处理”了

2,第2步:

给该预处理结果集中的未定数据进行“赋值”,比如:

$stmt->bindValue(1,  10); //对$sql1中的第一个问号赋值为10

$stmt->bindValue(2,  18); //对$sql1中的第2个问号赋值为18

3,第3步:

执行,此时该语句才算生效:

$stmt -> execute(); //执行。

举例:

PHP-PDO数据对象

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢