PDO知识点合集
PDO是别人写的“数据库操作工具类”!
一、PDO连接Mysql数据库
$DSN = "mysql:host=服务器地址/名称;port=端口号;dbname=数据库名";
$Opt = array(PDO::MYSQL_ATTR_INIT_COMMAND=>’set names 连接编码’);
$pdo = new pdo($DSN, "用户名", "密码", $Opt);
$dns = "mysql:host=localhost;port=3306;dbname=test"; $opt = array(PDO::MYSQL_ATTR_INIT_COMMAND => "set names utf8"); $pdo = new PDO($dns, "root", "root", $opt);
二、PDO对象常用方法
$pdo->query(“返回结果集的sql语句”);返回:结果集或false
$pdo->exec(“增删改的sql语句”); 返回:true或false
其他操作:
$pdo->lastInsertId(); 获取最后添加的id值;
$pdo->beginTransaction(); 开启一个事务
$pdo->commit() 提交一个事务
$pdo->rollBack(); 回滚一个事务;
$pdo->inTransaction(); 判断当前行是否在事务中,返回true/false
$pdo->setAttribute(属性名,属性值); 设置pdo对象的属性值; 举例:$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION)
三、PDO错误处理
默认情况下,pdo采用“静默模式”处理错误:就是发生了错误后,并不提示,而只是返回false。我们需要在程序中去判断返回是否为fale,然后,如果是false,再去“主动”获取错误信息。
设置PDO为异常模式:$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);通过try catch进行异常捕获处理
//设置为异常模式 $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); try{ $sql = "deleteee from test where id = 1"; $pdo->exec($sql); } catch (Exception $e) { echo $e->getCode(); echo $e->getMessage(); }
四、PDO结果集(PDOStatement)
$stmt = $pdo->query(“select ...... ”); //这是获得结果集
$stmt->rowCount() ; //得到结果集的行数
$stmt->columnCount() ; //得到结果集的列数
$stmt->fetch( [返回类型] ); //从结果集中取出“一行”数据;
取出的结果,由其中的“返回类型”来决定,常用的有:
PDO::FETCH_ASSOC:表示关联数组
PDO::FETCH_NUM:表示索引数组
PDO::FETCH_BOTH:表示前二者皆有,这是默认值
PDO::FETCH_OBJ:表示对象
$stmt->fetchAll([返回类型]); 一次性获取结果集中的所有数据,返回的是一个二维数组,相当于我们自己写的GetRows()
$stmt->fetchColumn( [$i] ); 获取结果集中的“下一行”数据的第$i个字段的值,结果是一个“标量数据”,相当于我们自己的写的:GetOneData()
$stmt->fetchObject();
$stmt->errorCode();: pdo结果集的错误代号
$stmt->errorInfo(); pdo结果集的错误信息(是一个数组)
$stmt->closeCursor(); 关闭结果集(相当于mysql_close() )
五、PDO预处理
语法1:
$sql = “select * from tab where id = ? “; //这里这个“?”就是未给定的数据项;这里通常叫做“占位符” //也可以是多个问好。
语法2:
$sql = “select * from tab where id = :v1 and name = :v2 “; //这里这个“:v1”和 “:v2” 就是未给定的数据项;通常这里叫做“命名参数”;
1,对含预处理语法的sql语句进行“预处理”:
$stmt = $pdo->prepare( $sql );
2, 对上述预处理的结果对象($stmt)的未赋值数据,进行赋值:
$stmt->bindValue( 数据项1, 值1);
$stmt->bindValue( 数据项2, 值2);
3, 执行执行:
$stmt->execute();
$stmt = $pdo->prepare("insert into test (name, age) values (?, ?)"); $stmt->bindValue(1, "yy"); $stmt->bindValue(2, 19); $stmt->execute();
$stmt = $pdo->prepare("select * from test where id = :v1"); $stmt->bindValue(":v1", 1); $stmt->execute(); $arr = $stmt->fetch(PDO::FETCH_ASSOC); var_dump($arr);