PDO错误处理三种模式
创新互联专注于海城网站建设服务及定制,我们拥有丰富的企业做网站经验。 热诚为您提供海城营销型网站建设,海城网站制作、海城网页设计、海城网站官网定制、微信小程序服务,打造海城网络公司原创品牌,更为您提供海城网站排名全网营销落地服务。
/* * 数据库抽象层PDO * 一个 DSN 由 PDO 驱动名、紧随其后的冒号、以及具体 PDO 驱动的连接语法组成。 * PDO::ERRMODE_SILENT * PDO::ERRMODE_WARNING * PDO::ERRMODE_EXCEPTION * * PDO中的执行SQL语句的方法 * 1.exec() 用来处理非结果集的 insert update delete create 返回影响行 * 2.query() 用来处理有结果集的 select desc show * * 两种都可以 * $pdo->exec('set names utf8'); * $pdo->query('set names utf8'); * */ //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).'
'; /* $query = "delete from helloworld"; $affected_rows = $pdo->exec($query); //PDO的错误处理模式(默认不提示,我们可能看不到问题)PDO::ERRMODE_SILENT if(!$affected_rows){ echo $pdo->errorCode(); echo '
'; echo ''; print_r($pdo->errorInfo()); echo ''; } //警告模式 $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING); echo $pdo->getAttribute(PDO::ATTR_ERRMODE); */ //异常模式 $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事务处理
/* * 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对预处理语句
/* * PDO对预处理语句 * 1.效率问题 编译次数 * 2.安全性问题 防止SQL注入 1 or 1='1' * $query = "delete from demo where id='{$_GET['id']}' "; * * */ $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(); } ======================================================================================= /* * PDO对预处理语句 * 1.效率问题 编译次数 * 2.安全性问题 防止SQL注入 1 or 1='1' * $query = "delete from demo where id='{$_GET['id']}' "; * * */ $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')); ======================================================================================= /* * PDO对预处理语句 * 1.效率问题 编译次数 * 2.安全性问题 防止SQL注入 1 or 1='1' * $query = "delete from demo where id='{$_GET['id']}' "; * fetch() * fetchAll() * setFetchMode() * */ $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.' | '; echo ''.$username.' | '; echo ''.$password.' | '; echo ''.$email.' | '; echo '