千家信息网

PHP PDO 事务处理 预处理 高洛峰 细说PHP

发表于:2025-01-20 作者:千家信息网编辑
千家信息网最后更新 2025年01月20日,PDO错误处理三种模式/* * 数据库抽象层PDO * 一个 DSN 由 PDO 驱动名、紧随其后的冒号、以及具体 PDO 驱动的连接语法组成。 * PDO::ERRMODE_SILENT * PDO
千家信息网最后更新 2025年01月20日PHP PDO 事务处理 预处理 高洛峰 细说PHP

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 '';        while(list($id,$username,$password,$email) = $pdostatement->fetch()){           echo '';           echo '';           echo '';           echo '';           echo '';           echo '';                   }        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);





0