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

作者:Cooper 时间:2018-06-06 阅读:676
<?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  
 
评 论
共有:条评论信息
我是有底线的