连接pdo
$DSN = "mysql:host=服务器地址/名称;port=端口号;dbname=数据库名";
$Opt = array(PDO::MYSQL_ATTR_INIT_COMMAND=>'set names 连接编码');
$pdo = new pdo($DSN, "用户名", "密码", $Opt);
$DSN = "mysql:host=localhost;port=3306;dbname=test";
$Opt = array(PDO::MYSQL_ATTR_INIT_COMMAND=>'set names utf8');
$pdo = new pdo($DSN, "root", "", $Opt);
使用pdo
$result = $pdo->query(“返回结果集的sql语句”);
结果:
成功:就是一个pdo结果集对象;
失败:false;
$result = $pdo->exec(“增删改的sql语句”);
结果: true(表示成功),false(表示失败);
pdo事务
$pdo->lastInsertId(); //获取最后添加的id值;
$pdo->beginTransaction(); //开启一个事务
$pdo->commit(); //提交一个事务
$pdo->rollBack(); //回滚一个事务;
$pdo->inTransaction(); //判断当前行是否在事务中,返回true/false
$pdo->setAttribute(属性名,属性值); //设置pdo对象的属性值;
pdo错误处理
如果返回false使用$pdo->errorInfo()得到错误信息
$sql="updateasdsa user set name ='abc';";
$result = $pdo->exec ($sql);
if( $result === false){
$error=$pdo->errorInfo();
echo $error[2];
}else{
echo '成功';
}
结果集
$stmt = $pdo->query("select......"); //这是获得结果集
$stmt->rowCount(); //得到结果集的行数
$stmt->columnCount(); //得到结果 集的列数
$stmt->fetch(返回类型); //从结果集中取出“一行”数据,取出的结果,由其中的返回类型来决定,常用的有:
PDO::FETCH_ASSOC:表示关联数组
PDO::FETCH_NUM:表示索引数组
PDO::FETCH_BOTH:表示前二者皆有,这是默认值
PDO::FETCH_OBJ:表示对象
$stmt->fetchAll(返回类型); //一次性获取结果集中的所有数据,返回的是一个二维数组,返回类型与fetch相同
$stmt->fetchColumn(列数);获取结果集中的“下一行”数据的第$i个字段的值,返回字符串,列数从零开始
$stmt->errorCode(); //pdo结果集的错误代号
$stmt->errorInfo(); //pdo结果集的错误信息(是一个数组)
$stmt->closeCursor(); //关闭结果集(相当于mysql_close())
pdo预处理
语法:
$sql = "select * from tab where id = ? "; //这里这个"?"就是未给定的数据项;这里通常叫做“占位符”,也可以是多个问好。
$sql = "select * from tab where id = :v1 and name = :v2"; //这里这个“:v1”和 “:v2”就是未给定的数据项,通常这里叫做“命名参数”;
使用:
//分3步:
//1,对含预处理语法的sql语句进行“预处理”:
$stmt = $pdo->prepare( $sql );
//2, 对上述预处理的结果对象($stmt)的未赋值数据,进行赋值:
$stmt->bindValue( 数据项1, 值1);
$stmt->bindValue( 数据项2, 值2);
//3, 执行执行:
$stmt->execute();
//这样之后,该sql语句就算正式完成!
实际使用
//第一种形式
$sql="select * from user where id = ? and name = ?";
$stmt=$pdo->prepare($sql);
/*
$stmt->bindValue(1,2);
$stmt->bindValue(2,'pmd');
$stmt->execute();
*/
$stmt->execute([1,'zhl']);
var_dump($stmt->fetch());
//第二种形式
$sql="select * from user where id = :id and name = :name";
$stmt=$pdo->prepare($sql);
/*
$stmt->bindValue(':id',1);
$stmt->bindValue(':name','zhl');
$stmt->execute();
*/
$stmt->execute([':id'=>2,':name'=>'pmd']);
var_dump($stmt->fetch());