PHP PDO 事务处理 预处理 高洛峰 细说PHP
发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,PDO错误处理三种模式/* * 数据库抽象层PDO * 一个 DSN 由 PDO 驱动名、紧随其后的冒号、以及具体 PDO 驱动的连接语法组成。 * PDO::ERRMODE_SILENT * PDO
千家信息网最后更新 2026年11月01日PHP PDO 事务处理 预处理 高洛峰 细说PHP'; while(list($id,$username,$password,$email) = $pdostatement->fetch()){ echo '
'; }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);
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 '
数据
数据库
错误
语句
模式
预处理
问题
编译
处理
管理系统
系统
管理
原因
参数
对象
事务
成功
变量
问号
安全
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
互联网加科技
博彦科技互联网金融
互联网科技网
厦门中拓互联网络科技有限公司
互联网科技公司电话
鑫亿盛互联网科技
电子科技大学互联网
甘肃拓世互联网科技有限公司
山东吉时兔互联网科技有限公司
厦门比较好的科技互联网公司
黑科技闪耀互联网之光
玉溪新华互联网科技好不好
上海京穆互联网科技有限公司
互联网科技年终奖
半导体是互联网高科技吗
新氧科技和美国互联网有关系吗
江苏互联网智能科技产品出厂价
唯美互联网科技
同城互联网络科技
小牛互联网科技有限公司地址
科技股互联网
礼当家互联网科技
科技互联网公司logo
伴你行互联网科技有限公司
成都狮子座互联网科技
互联网科技类展会
衡水科技产业互联网平台
互联网汽车科技小镇
广州恒生互联网科技有限
晓花互联网科技有限公司网址