PHP-PDO数据对象
1、1.
PDO: PHP Data Object:PHP数据对象
到底是什么?
它是“别人”写的类似我们自己写的MySQLDB工具类!
即,它的作用也是:
1),连接数据库;
2),执行增删改语句;
3),执行查询语句:可以分为3中:查多行,查一行,查一个
但,PDO功能强大:
1),可以连接很多种数据库。
2),几乎能完成数据库的各种操作:各种增删改查,以及事务。。。。
不过,在php语言配置领域,其实PDO的结构类似这样:

2、2.比如(示意性代码):
$p = new pdo( 连接某种数据库的参数信息 );
$re1 = $p->exec( ‘insert / update / delete ........’) //返回“受影响的行数”或false
$re2 = $p->query(‘select / desc / show .....’); //返回“pdo结果集对象”或false
其中,各种不同数据库的“引擎”,需要到php.ini中的打开相应的“模块”,比如:

3、3.连接数据库的参数信息
包括:
数据库类型:比如mysql,mssql,oracle
地址:比如localhost
端口:比如3306
用户名:
密码:
数据库名:
连接编码名:
举例:

4、4.结果为:

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{
//正确时 。。。。
}

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();
}

3、3.结果为:

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();关闭资源
举例(取一行):

2、2.取多行:

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(); //执行。
举例:
