A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 小鲁哥哥 于 2017-11-1 09:09 编辑

【黑马程序员济南】PHP之PDO介绍(二)

异常模式
        使用一种特定的异常处理语法,则一发生错误,就会自动处理,不发生错误,就正常执行。
语法形式如下:
       try {
              //这里执行pdo的一些操作,比如:
              $result1  = $pdo->query(“select  *  form  user_list;”);        //该语句有错误!
              上一行“可能”出错,则如果出错,就不会再执行try范围中的后续语句;而是进入catch语句中
              而没有出错,就会继续执行try中的后续语句;
              。。。这里可以继续处理pdo结果集对象$result1;
       }
       catch ( PDOEXCEPTION  $e){
              //这里,$e是一个“对象”——就是“错误对象”,或所谓的“异常对象”
              其中$e对象有一些属性或方法可以获取有关错误的信息,比如:
              echo “错误代号:” . $e->GetCode();
              echo ‘错误信息:” . $e->GetMessage()
       }

       使用异常模式,必须先将pdo对象“设置为异常模式”,如下:
       $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
[PHP] 纯文本查看 复制代码
<?php
/*黑马程序员济南中心出品*/

//连接PDO
$dsn = "mysql:host=localhost;port=3306;dbname=haha";
$opt = array(PDO::MYSQL_ATTR_INIT_COMMAND=>'set names utf8');
$pdo = new pdo($dsn,"root","123",$opt);

//演示异常模式:
$pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);

try{
    $result = $pdo->query("select * from no_this_table;");//没有这个表,该语句有错误!
    var_dump($result);//不会执行这步。。
}
catch(PDOEXCEPTION $e){
    echo "错误代号:" . $e->GetCode();
    echo "错误信息:" . $e->GetMessage();
}

pdo的结果集对象
       $stmt = $pdo->query(“select ...... ”);//这是获得结果集
       $stmt->rowCount() :结果的行数
       $stmt->columnCount() :结果的列数
       $stmt->fetch( [返回类型] ):获取结果集的一行,为一个一维数组
        //其中返回类型常用的有:
               PDO::FETCH_ASSOC:表示关联数组
              PDO::FETCH_NUM:表示索引数组
              PDO::FETCH_BOTH:表示前二者皆有,这是默认值
              PDO::FETCH_OBJ:表示对象
       $stmt->fetchAll([返回类型]):获取结果集的所有行,为一个二维数组
       $stmt->fetchColumn( [$i] ):获取一行的某个列,默认为第一列的值

pdo的预处理语句
       基本理解:
              就是一条sql语句中,包含了“未定参数数据”,但却预先对该sql语句进行“预处理”,以提升速度,提高安全性。
       比如:
              语法一:$sql1 = "select * from tab1 where f1 = ? and f2 >?";         //占位符形式
              语法二:$sql2 = "select * from tab1 where f1 = :val1 and f2 >:val2";         //命名参数形式
       我们可以先“预处理”:
              $result1 = $pdo->prepare( $sql1 );
              $result2 = $pdo->prepare( $sql2 );
       然后,可以对其中的“未定参数数据”进行赋值了,比如:
              $result1->bindValue( 1, 值1);                //这种形式只能用数字代号表示第几个,顺序从1开始
              $result1->bindValue( 2, 值2);                //还要注意:字符串或数字就该怎么写就怎么写
       或:
              $result2 -> bindValue(“:val1”,  值1);//这里只能用该带冒号的名字来表示
              $result2 -> bindValue(“:val2”,  值2);
       最后,就可以执行了:得到该得到的结果集!
              $result1->execute();
              $result2->execute();
举例:
[PHP] 纯文本查看 复制代码
<?php
/*黑马程序员济南中心出品*/

//连接PDO
$dsn = "mysql:host=localhost;port=3306;dbname=haha";
$opt = array(PDO::MYSQL_ATTR_INIT_COMMAND=>'set names utf8');
$pdo = new pdo($dsn,"root","123",$opt);

//语法一:
$sql1 = "select * from user_list where user_name= ? and age>?";//占位符形式
//语法二:
$sql2 = "select * from user_list where user_id >:n and age < :age";//命名参数形式

$re1 = $pdo->prepare($sql1);    //进行预处理
$re2 = $pdo->prepare($sql2);    //进行预处理

$re1->bindValue(1,"user3");
$re1->bindValue(2,30);
$re1->execute();

$re1->bindValue(":n",10);
$re1->bindValue(":age",60);
$re1->execute();


[align=left]
点进这个帖子的同学肯定是要奋发图强,学技术拿高薪的有志青年,这里我看你骨骼惊奇,是个绝世的练武奇才,你我有缘,今天我就把这个武林秘籍如来神掌传授于你! 什么?不想学如来神掌?不要紧!这里有各个门派的武林绝学,链接拿好!!哈哈哈哈

1 个回复

倒序浏览
感觉这个跟Java的很像啊
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马