广告
返回顶部
首页 > 资讯 > 后端开发 > PHP编程 >PHP PDO 事务处理 预处理 高洛峰 细说PHP
  • 509
分享到

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

2024-04-02 19:04:59 509人浏览 独家记忆
摘要

PDO错误处理三种模式         //Mysql_connect('localhost','root','root')

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).'<br/>';
        echo $pdo->getAttribute(PDO::ATTR_SERVER_VERSION).'<br/>';
        echo $pdo->getAttribute(PDO::ATTR_AUTOCOMMIT).'<br/>';
        echo $pdo->getAttribute(PDO::ATTR_CASE).'<br/>';
        echo $pdo->getAttribute(PDO::ATTR_CONNECTION_STATUS ).'<br/>';
        echo $pdo->getAttribute(PDO::ATTR_DRIVER_NAME).'<br/>';
        echo $pdo->getAttribute(PDO::ATTR_PERSISTENT).'<br/>';
        
        //异常模式
        $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 '交易成功!<br/>';
    //提交以上的操作
    $pdo->commit();
}catch (PDOException $e){
    echo '错误的原因:'.$e->getMessage();
    echo '交易失败!<br/>';
    //撤销所有的操作
    $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 '<table border="1" width="800" align="center">';
        while(list($id,$username,$password,$email) = $pdostatement->fetch()){
           echo '<tr>';
           echo '<td>'.$id.'</td>';
           echo '<td>'.$username.'</td>';
           echo '<td>'.$password.'</td>';
           echo '<td>'.$email.'</td>';
           echo '</tr>';
           
        }
        echo '</table>';
        
}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);





--结束END--

本文标题: PHP PDO 事务处理 预处理 高洛峰 细说PHP

本文链接: https://www.lsjlt.com/news/36984.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作