首页 > 代码库 > PDO对象方法的使用详细介绍(一)

PDO对象方法的使用详细介绍(一)

<span style="font-size:18px;"><?php

一:插入语句  

 try{
        $pdo=new PDO("mysql:host=localhost;dbname=xsphpdb", "root", "123456");
    }catch(PDOException $e){
        echo "数据库连接失败:".$e->getMessage();
        exit;
    }

    //执行SQL语句 exec() query()  prepare()
    //一是有结果集的query(), 执行select语句
    //exec()用来执行有影响行数的,update, delete insert, other
    //exec()返回的是影响的行数
    echo "影响的行数".$pdo->exec("insert into shops(name1, price, num, desn) values('aa', '12.1', '10', 'good')");

    //设置错误报告模式
    

二:设置错误模式-默认模式

    try{
        $pdo=new PDO("mysql:host=localhost;dbname=xsphpdb", "root", "123456");
    }catch(PDOException $e){
        echo "数据库连接失败:".$e->getMessage();
        exit;
    }

    //执行SQL语句 exec() query()  prepare()
    //一是有结果集的query(), 执行select语句
    //exec()用来执行有影响行数的,update, delete insert, other
    //exec()返回的是影响的行数
    $affected_rows=$pdo->exec("insert into shops(name, price, num, desn) values('aa', '12.1', '10', 'good')");

    //设置错误报告模式 ERRMODE_SILENT 0   ERRMODE_WARNING  1    ERRMODE_EXCEPTION 2

    if(!$affected_rows){   //默认模式,如果自己不懈 默认模式sql有问题什么都不会提示
        echo $pdo->errorCode()."<br>";//错误代码
        print_r($pdo->errorInfo());      //错误的详细信息
    }else{
        echo "执行成功!";
    }

三:设置警告模式

try{
        $pdo=new PDO("mysql:host=localhost;dbname=xsphpdb", "root", "123456");
        $pdo->setAttribute(PDO::ATTR_ERRMODE,  PDO::ERRMODE_WARNING);//sql执行错误,设置成警告模式
    }catch(PDOException $e){
        echo "数据库连接失败:".$e->getMessage();
        exit;
    }

    //执行SQL语句 exec() query()  prepare()
    //一是有结果集的query(), 执行select语句
    //exec()用来执行有影响行数的,update, delete insert, other
    //exec()返回的是影响的行数
    $affected_rows=$pdo->exec("insert into shops(name1, price, num, desn) values('aa', '12.1', '10', 'good')");

    //设置错误报告模式 ERRMODE_SILENT    ERRMODE_WARNING

    print_r($pdo->errorInfo());

四:PDO异常模式 ---推荐使用

    try{
        $pdo=new PDO("mysql:host=localhost;dbname=xsphpdb", "root", "123456");
        $pdo->setAttribute(PDO::ATTR_ERRMODE,  PDO::ERRMODE_EXCEPTION);//pdo推荐使用模式 ----异常模式
    }catch(PDOException $e){
        echo "数据库连接失败:".$e->getMessage();
        exit;
    }

    //执行SQL语句 exec() query()  prepare()
    //一是有结果集的query(), 执行select语句
    //exec()用来执行有影响行数的,update, delete insert, other
    //exec()返回的是影响的行数
    try{
        $affected_rows=$pdo->exec("insert into shops(name1, price, num, desn) values('aa', '12.1', '10', 'good')");
    }catch(PDOException $e){
        echo $e->getMessage();//设置成警告模式的话就会走到这里
    }
    //设置错误报告模式 ERRMODE_SILENT    ERRMODE_WARNING


    五:select语句,只有查询用query

try{
        $pdo=new PDO("mysql:host=localhost;dbname=xsphpdb", "root", "123456");
        $pdo->setAttribute(PDO::ATTR_ERRMODE,  PDO::ERRMODE_EXCEPTION);
    }catch(PDOException $e){
        echo "数据库连接失败:".$e->getMessage();
        exit;
    }

    //执行SQL语句 exec() query()  prepare()
    //一是有结果集的query(), 执行select语句
    //exec()用来执行有影响行数的,update, delete insert, other
    //exec()返回的是影响的行数
    try{
        $stmt=$pdo->query("select * from shops");

        foreach($stmt as $row){
            print_r($row);
            echo '<br>';
        }

    }catch(PDOException $e){
        echo $e->getMessage();
    }
    //设置错误报告模式 ERRMODE_SILENT    ERRMODE_WARNING

六:PDO事务处理

try{
        //PDO::ATTR_AUTOCOMMIT=>0 数据库的自动提交先关掉(事物)
        $pdo=new PDO("mysql:host=localhost;dbname=xsphpdb", "root", "123456", array(PDO::ATTR_AUTOCOMMIT=>0));
        $pdo->setAttribute(PDO::ATTR_ERRMODE,  PDO::ERRMODE_EXCEPTION);
    }catch(PDOException $e){
        echo "数据库连接失败:".$e->getMessage();
        exit;
    }

    //执行SQL语句 exec() query()  prepare()
    //一是有结果集的query(), 执行select语句
    //exec()用来执行有影响行数的,update, delete insert, other
    //exec()返回的是影响的行数
    /*
     *
     * 事务处理
     *
     *   张三从李四那里买了一台 2000 元的电脑
     *
     *     从张三帐号中扣出 2000元
     *
     *     向李四账号中加入 2000元
     *
     *     从商品表中减少一台电脑
     *
     *     MyIsAM不支持事物处理,速度快  ****InnoDB支持事物处理,但速度吗
     *
     */
    单条语句别用事物
    try{
        $pdo->beginTransaction();//开启事物
        
        $price=500;

        $sql="update zhanghao set price=price-{$price} where id=1";

        $affected_rows=$pdo->exec($sql);

        if(!$affected_rows)
            throw new PDOException("张三转出失败");//如果执行错误手动抛出一个异常
            
        //比如数据库id只有  1,2 故意写3不存在的数据也会说执行成功,所以手动抛出个异常信息
        $sql="update zhanghao set price=price+{$price} where id=3";   

        $affected_rows=$pdo->exec($sql);
            
        if(!$affected_rows)
            throw new PDOException("向李四转入失败");//手动抛出一个异常    PDOException函数

        echo "交易成功!";
        $pdo->commit();
    }catch(PDOException $e){
        echo $e->getMessage();
        $pdo->rollback();//如果上面2个UODATE语句有问题就回滚
    }
    
    $pdo->setAttribute(PDO::ATTR_AUTOCOMMIT, 1);//最后执行在吧自动提交模式在开启,否则数据看到不没执行类似缓存效果
    
    //设置错误报告模式 ERRMODE_SILENT    ERRMODE_WARNING


</span>


PDO对象方法的使用详细介绍(一)