PDO错误处理三种模式
//mysql_connect('localhost','root','root');
// mysql_select_db('test');
$dsn = 'mysql:dbname=test;host=localhost';
$username = 'root';
$passwd = 'root';
$options = array(
PDO::ATTR_AUTOCOMMIT=>true,
PDO::ATTR_PERSISTENT=>true
);
try{
$pdo = new PDO($dsn, $username, $passwd, $options);
}catch(PDOException $e){
echo "数据库连接失败:".$e->getMessage();
exit;
}
echo '创建PDO对象成功!';
echo $pdo->getAttribute(PDO::ATTR_CLIENT_VERSION).'
';
echo $pdo->getAttribute(PDO::ATTR_SERVER_VERSION).'
';
echo $pdo->getAttribute(PDO::ATTR_AUTOCOMMIT).'
';
echo $pdo->getAttribute(PDO::ATTR_CASE).'
';
echo $pdo->getAttribute(PDO::ATTR_CONNECTION_STATUS ).'
';
echo $pdo->getAttribute(PDO::ATTR_DRIVER_NAME).'
';
echo $pdo->getAttribute(PDO::ATTR_PERSISTENT).'
';
//异常模式
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
try{
//使用PDO中的方法执行语句
//插入
$query = "insert into users(username,password,email) values('xiaowang','123','xiaoming@163.com')";
$affected_rows = $pdo->exec($query);
echo $pdo->lastInsertId();
//查询
$query = "select * from users";
$result = $pdo->query($query);
var_dump($result);
}catch (PDOException $e){
echo '错误的原因:'.$e->getMessage();
}
PDO事务处理
$dsn = 'mysql:dbname=test;host=localhost';
$username = 'root';
$passwd = 'root';
$options = array(
PDO::ATTR_AUTOCOMMIT=>true,
PDO::ATTR_PERSISTENT=>true
);
try{
//创建对象
$pdo = new PDO($dsn, $username, $passwd, $options);
//设置错误使用异常模式
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
//关闭自动提交(使用事务第一步)
$pdo->setAttribute(PDO::ATTR_AUTOCOMMIT, false);
}catch(PDOException $e){
echo "数据库连接失败:".$e->getMessage();
exit;
}
try{
//开启一个事务
$pdo->beginTransaction();
$price = 50;
$statement = "update demo set salary=salary-{$price} where id=1";
$a=$pdo->exec($statement);
if($a>0){
echo '转出成功!';
}else{
throw new PDOException('转出失败!');
}
$statement = "update demo set salary=salary+{$price} where id=3";
$b=$pdo->exec($statement);
if($b>0){
echo '转入成功!';
}else{
throw new PDOException('转入失败!');
}
echo '交易成功!
';
//提交以上的操作
$pdo->commit();
}catch (PDOException $e){
echo '错误的原因:'.$e->getMessage();
echo '交易失败!
';
//撤销所有的操作
$pdo->rollBack();
}
//运行完成后开启自动提交
$pdo->setAttribute(PDO::ATTR_AUTOCOMMIT, true);
PDO对预处理语句
$dsn = 'mysql:dbname=test;host=localhost';
$username = 'root';
$passwd = 'root';
$options = array(
PDO::ATTR_AUTOCOMMIT=>true,
PDO::ATTR_PERSISTENT=>true
);
try{
//创建对象
$pdo = new PDO($dsn, $username, $passwd, $options);
//设置错误使用异常模式
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}catch(PDOException $e){
echo "数据库连接失败:".$e->getMessage();
exit;
}
try{
$statement = "insert into users(username,password,email) values(?,?,?)";// ?表示占位
//直接给数据库管理系统并执行
//$pdo->query($statement);
//给数据库管理系统,编译后等待 没有执行
$pdostatement=$pdo->prepare($statement);
//绑定参数(?) 将问号和一个变量关联起来 对于使用问号占位符的预处理语句,应是以1开始索引的参数位置。
$pdostatement->bindParam(1, $username);
$pdostatement->bindParam(2, $password);
$pdostatement->bindParam(3, $email);
//给变量赋值
$username = 'lisiming1';
$password = '1234';
$email = 'lisiming@163.com';
//PDOStatement::execute — 执行一条预处理语句
$pdostatement->execute();
$username = 'lisiming2';
$password = '1234';
$email = 'lisiming@163.com';
$pdostatement->execute();
}catch (PDOException $e){
echo '错误的原因:'.$e->getMessage();
}
=======================================================================================
$dsn = 'mysql:dbname=test;host=localhost';
$username = 'root';
$passwd = 'root';
$options = array(
PDO::ATTR_AUTOCOMMIT=>true,
PDO::ATTR_PERSISTENT=>true
);
try{
//创建对象
$pdo = new PDO($dsn, $username, $passwd, $options);
//设置错误使用异常模式
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}catch(PDOException $e){
echo "数据库连接失败:".$e->getMessage();
exit;
}
try{
$statement = "insert into users(username,password,email) values(:username,:password,:email)";// :name 形式的参数名
//直接给数据库管理系统并执行
//$pdo->query($statement);
//给数据库管理系统,编译后等待 没有执行
$pdostatement=$pdo->prepare($statement);
//绑定参数(?) 将问号和一个变量关联起来 对于使用问号占位符的预处理语句,应是以1开始索引的参数位置。
$pdostatement->bindParam(':username', $username,PDO::PARAM_STR);
$pdostatement->bindParam(':password', $password,PDO::PARAM_STR);
$pdostatement->bindParam(':email', $email,PDO::PARAM_STR);
//给变量赋值
$username = 'lisiming3';
$password = '1234';
$email = 'lisiming@163.com';
//PDOStatement::execute — 执行一条预处理语句
$pdostatement->execute();
$username = 'lisiming4';
$password = '1234';
$email = 'lisiming@163.com';
$pdostatement->execute();
}catch (PDOException $e){
echo '错误的原因:'.$e->getMessage();
}
=======================================================================================
$statement = "insert into users(username,password,email) values(?,?,?)";
//给数据库管理系统,编译后等待 没有执行
$pdostatement=$pdo->prepare($statement);
$pdostatement->execute(array('xiaoli','123','xiaoli@163.com'));
=======================================================================================
$statement = "insert into users(username,password,email) values(:username,:password,:email)";
//给数据库管理系统,编译后等待 没有执行
$pdostatement=$pdo->prepare($statement);
$pdostatement->execute(array('username'=>'xiaoli1','password'=>'1123aa','email'=>'xiaoli1@163.com'));
=======================================================================================
$dsn = 'mysql:dbname=test;host=localhost';
$username = 'root';
$passwd = 'root';
$options = array(
PDO::ATTR_AUTOCOMMIT=>true,
PDO::ATTR_PERSISTENT=>true
);
try{
//创建对象
$pdo = new PDO($dsn, $username, $passwd, $options);
//设置错误使用异常模式
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}catch(PDOException $e){
echo "数据库连接失败:".$e->getMessage();
exit;
}
try{
$statement = "select * from users where id > ? and id < ?";
//给数据库管理系统,编译后等待 没有执行
$pdostatement=$pdo->prepare($statement);
$pdostatement->execute(array(3,6));
//设置结果的模式
$pdostatement->setFetchMode(PDO::FETCH_NUM);
echo '
| '.$id.' | ';'.$username.' | ';'.$password.' | ';'.$email.' | ';
}catch (PDOException $e){
echo '错误的原因:'.$e->getMessage();
}
=======================================================================================
//绑定栏目
$pdostatement->bindColumn(1, $id);
$pdostatement->bindColumn(2, $username);
$pdostatement->bindColumn(3, $password);
$pdostatement->bindColumn(4, $email);
=======================================================================================
//绑定栏目
$pdostatement->bindColumn('id', $id);
$pdostatement->bindColumn('username', $username);
$pdostatement->bindColumn('password', $password);
$pdostatement->bindColumn('email', $email);



