PHP-PDO
1.PDO: PHP Data Object:PHP数据对象到底是什么?它是“别人”写的类似我们自己写的MySQLDB工具类!即,它的作用也是:1),连接数据库;2),执行增删改语句;3),执行查询语句:可以分为3中:查多行,查一行,查一个 但,PDO功能强大:1),可以连接很多种数据库。2),几乎能完成数据库的各种操作:各种增删改查,以及事务。。。。 不过,在php语言配置领域,其实PDO的结构类似这样:
2.比如(示意性代码):$p = new pdo( 连接某种数据库的参数信息 );$re1 = $p->exec( ‘insert / update / delete ........’) //返回“受影响的行数”或false$re2 = $p->query(‘select / desc / show .....’); //返回“pdo结果集对象”或false其中,各种不同数据库的“引擎”,需要到php.ini中的打开相应的“模块”,比如:
4.结果为:
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{//正确时 。。。。}
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();}
3.结果为:
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();关闭资源举例(取一行):
2.取多行:
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个问号赋值为183,第3步:执行,此时该语句才算生效:$stmt -> execute(); //执行。举例: