PHP高级 PDO 第38天

2012-11-16 14:59:51 0  category: 第二阶段php

PHP数据库抽象层


数据库连接


1, 连接数据库


2, 判断错误


3, 设置字符集【PDO当中木有设置字符集的这一个选项和设置】


4, 选择数据库


5, 准备SQL语句  [有结果集的,无结果集的]


有结果集的用query()

无结果集的用exec()


6, 发送SQL语句


7, 获取结果集或者是判断是否成功


8, 关闭数据库连接



连接数据库的时候,第一步是传入DSN


Data source name  数据源名


设置数据驱动选项有两种方式


第一种在new Pdo的时候传入第4个参数,以数组键值对的形式来去传。


第二种$pdo->setAttribute(属性名,属性值);



错误处理模式:


PDO::ATTR_ERRMODE:   错误处理模式


PDO::ERRMODE_SILENT:  使用$pdo对象->errorCode() $pdo->errorInfo()来获取错误号和错误信息


PDO::ERRMODE_WARNING自动为PHP内部的警告模式



PDO的占位符有两种,第一种是?  第二种是 : 字符串





绑定参数的第一种形式:$stmt->bindParam(1,$username,PDO::PARAM_STR);


第一种方式:

$stmt->bindColumn(1,$id);

$stmt->bindColumn(2,$username);

$stmt->bindColumn(3,$password);

while($stmt->fetch()){

echo $id.'=========='.$username.'--------'.$password.'<br>';

}


第二种方式:

while($row=$stmt->fetch()){

echo $row[0].'----------'.$row[1].'<br />';

}


第三种情况:

while($row=$stmt->fetch(PDO::FETCH_ASSOC)){

var_dump($row);

echo $row['id'].'----------'.$row['username'].'<br />';

}


第四种情况:

$a=$stmt->fetchAll();

foreach($a as $value){

echo $value['username'].'<br>';

}


PDO.php


<?php
//PDO有错不用throw 自动扔给catch

try{
$dsn='mysql:host=localhost;dbname=php_o';

$pdo=new Pdo($dsn,'root','php_aha');

$pdo->query('set names utf8');

$sql="insert into php_user(username,password,createtime) values('责','的每份','123')";

$a=$pdo->exec($sql);

}catch(PDOException $e){
echo 'PDO连接错误';
echo $e->getMessage();
}
?>




no.1.php


<?php
try{

$dsn='mysql:host=localhost;dbname=php_mo';

$pdo=new Pdo($dsn,'root','liwenkaihaha');

$pdo->query('set names utf8');

$stmt=$pdo->prepare('select id,username,password from 3user where id>:id');


$stmt->bindParam(':id',$id);

$id=1;

$stmt->execute();

//重点,fetch fetchAll的遍历
//
//
//execute 执行及bindParam bindValue

$stmt->setFetchMode(PDO::FETCH_ASSOC);


while($row=$stmt->fetch()){
echo $row['username'].'<br>';

}



$a=$stmt->fetchAll();


foreach($a as $value){

echo $value['username'].'<br>';
}
while($row=$stmt->fetch(PDO::FETCH_ASSOC)){


var_dump($row);

echo $row['id'].'----------'.$row['username'].'<br />';

}

while($row=$stmt->fetch()){

echo $row[0].'----------'.$row[1].'<br />';

}

$stmt->bindColumn(1,$id);
$stmt->bindColumn(2,$username);
$stmt->bindColumn(3,$password);

while($stmt->fetch()){

echo $id.'=========='.$username.'--------'.$password.'<br>';
}

$stmt=$pdo->prepare('delete from 37demo_user where id>?');

$stmt->bindParam(1,$id);

$id=25;

$vo=$stmt->execute();


if($vo){
echo '执行成功';

}else{
echo '执行失败';
}

echo $stmt->rowCount();

$stmt=$pdo->prepare('update 3er set username=:user,password=:pass where id=:id');
$stmt->execute(array(':user'=>'liwenkai',':pass'=>'aaa',':id'=>31));

$stmt->execute(array(1=>'abc',2=>'cbd',3=>30));

$username='柔';

$password='长';

$time=123456;

$stmt=$pdo->prepare('insert into 37ser(username,password,createtime) values(?,?,?)');

$stmt->bindValue(1,$username,PDO::PARAM_STR);
$stmt->bindValue(2,$password,PDO::PARAM_STR);
$stmt->bindValue(3,$time,PDO::PARAM_INT);

$stmt->execute();

$stmt=$pdo->prepare('insert into 3_user(username,password,createtime) values(:username,:pass,:ct)');

$stmt->execute(array(':username'=>'lixiaopi',':pass'=>'有',':ct'=>123456));

$stmt=$pdo->prepare('insert into p_ser(username,password,createtime) values(:username,:pass,:ct)');

$stmt->bindParam(':username',$username);
$stmt->bindParam(':pass',$password);
$stmt->bindParam(':ct',$time);

$username='尽心尽力';
$password='师';
$time='123213';

$stmt->execute();

$stmt=$pdo->prepare('insert into o_user(username,password,createtime) values(:username,:pass,:ct)');

$stmt->bindParam(':username',$username,PDO::PARAM_STR);
$stmt->bindParam(':pass',$password,PDO::PARAM_STR);
$stmt->bindParam(':ct',$time,PDO::PARAM_INT);

$username='开心';

$password='其的';

$time=1;

$stmt->execute();

$stmt->bindParam(1,$username,PDO::PARAM_STR);

$stmt->bindParam(2,$password,PDO::PARAM_STR);

$stmt->bindParam(3,$time,PDO::PARAM_INT);


$username='心';

$password='气';

$time=123456;


$vo=$stmt->execute();


var_dump($vo);

}catch(PDOException $e){

echo 'PDO遇到错误:';

echo $e->getMessage();
}
?>


abc.php


<?php
try{
$dsn='mysql:host=localhost;dbname=php_mo';

$pdo=new Pdo($dsn,'root','php_ha');


$pdo->query('set names utf8');

$sql="select * from php_r";

$result=$pdo->query($sql);


foreach($result as $value){

echo $value['id'].'---------'.$value['username'].'------'.$value['password'].'<br>';

}

$sql="update php_r set username='快',password='行' where id>20";

$vo=$pdo->exec($sql);

var_dump($vo);

$sql="delete from php_user where id<20";

$vo=$pdo->exec($sql);

var_dump($vo);

$sql="insert into php_ser(username,password,createtime) values('当态','们',123456)";

$vo=$pdo->exec($sql);


if($vo){

echo '注册成功';
}else{
echo '注册失败';

}
}catch(PDOException $e){
echo '发生错误' . $e->getMessages();
}
?>


file.php


<?php

try{


$dsn='mysql:host=localhost;dbname=phpemo';

$pdo=new Pdo($dsn,'root','php_haha');

$pdo->query('set names utf8');

/*

$stmt=$pdo->prepare('insert into file(file) values(:file)');

$stmt->bindParam(':file',$file,PDO::PARAM_LOB);

$file=fopen('nm.jpg','r');

$stmt->execute();


*/


$stmt=$pdo->prepare('select file from file');

$stmt->execute();

$row=$stmt->fetch();

header('content-type:image/jpeg');
echo $row[0];


}catch(PDOException $e){

}
?>



pdo事务


transla.php


<?php
try{
$pdo=new Pdo('mysql:host=localhost;dbname=php_mo','root','php_ha');


$pdo->setAttribute(PDO::ATTR_AUTOCOMMIT,0);


$pdo->beginTransaction();

$flag=true;

$sql="update ye set je=je-20000000 where id=2";

$result=$pdo->exec($sql);

if(!$result){
$flag=false;
}
$sql="update ye set je=je+20000000 where id=1";

$result=$pdo->exec($sql);


if($result&&$flag){

echo '转帐成功';
$pdo->commit();
}else{
echo '转帐失败';
$pdo->rollback();
}

$pdo->setAttribute(PDO::ATTR_AUTOCOMMIT,1);

}catch(PDOException $e){

echo '遇到错误'.$e->getMessage();
}
?>