美文网首页
php学习笔记(六)

php学习笔记(六)

作者: dev_winner | 来源:发表于2019-08-17 12:28 被阅读0次

    PHP异常处理

    • 从PHP5开始,PHP支持异常处理,异常处理是面向对象一个重要特性,PHP代码中的异常通过throw抛出,异常抛出之后,后面的代码将不会再被执行。异常抛出被用于在遇到未知错误,或者不符合预先设定的条件时,通知客户程序,以便进行其他相关处理,不至于使程序直接报错中断
    • 当代码中使用了try-catch时,抛出的异常会在catch中捕获,并创建一个包含异常信息的对象,通过从这个 exception 对象调用 $e->getMessage(),输出来自该异常的错误消息,否则会直接中断。注意:每一个 throw 必须对应至少一个 catch,当然可以对应多个"catch"。
    • PHP具有很多异常处理类,其中Exception是所有异常处理的基类
    • Exception具有几个基本属性与方法,其中包括了:
    // 常用的属性
    message 异常消息内容
    code 异常代码
    file 抛出异常的文件名
    line 抛出异常在该文件的行数
    // 常用的方法
    getTrace 获取异常追踪信息
    getTraceAsString 获取异常追踪信息的字符串
    getMessage 获取出错信息
    
    • 小练习:自定义一个异常类,其继承了PHP的异常基类Exception。
    <?php
    class MyException extends Exception {
        function getInfo() {
            return '自定义错误信息';
        }
    }
    try {
        throw new MyException('error');
    } catch(Exception $e) {
        echo $e->getInfo().'<br>';
        echo $e->getMessage();
    }
    
    • 一般的异常处理流程代码为:
    <?php
    try {
        throw new Exception('wrong');
    } catch(Exception $ex) {
        echo 'Error:'.$ex->getMessage().'<br>';
        echo $ex->getTraceAsString().'<br>';
    }
    echo '异常处理后,继续执行其他代码';
    
    • 在实际应用中,我们通常会获取足够多的异常信息,然后写入到错误日志中。将报错的文件名行号错误信息异常追踪信息等记录到日志中,以便调试与修复问题。
    <?php
    try {
        throw new Exception('wrong');
    } catch (Exception $ex) {
        $msg = 'Error:' . $ex->getMessage() . "\n";
        $msg .= $ex->getTraceAsString() . "\n";
        $msg .= '异常行号:' . $ex->getLine() . "\n";
        $msg .= '所在文件:' . $ex->getFile() . "\n";
        //将异常信息记录到日志中PHP异常处理之
        file_put_contents('error.log', $msg);
    }
    /*
    error.log文件中的内容 
    Error:wrong
    #0 {main}
    异常行号:3
    所在文件:D:\PHP实战\php_demo01\src\p_test02.php
    */
    

    PHP操作数据库

    • 当前主流的数据库有MsSQL,MySQL,Sybase,Db2,Oracle,PostgreSQL,Access等,这些数据库PHP都能够安装扩展来支持,一般情况下常说的LAMP架构指的是:LinuxApacheMysqlPHP
    • PHP中一个数据库可能有一个或者多个扩展,其中既有官方的,也有第三方提供的。像Mysql常用的扩展有原生的mysql库,也可以使用增强版的mysqli扩展,还可以使用PDO进行连接与操作。
    • mysql扩展进行数据库连接的方法:
    $link = mysql_connect('mysql_host', 'mysql_user', 'mysql_password');
    
    • mysqli扩展:
    $link = mysqli_connect('mysql_host', 'mysql_user', 'mysql_password', 'mysql_database');
    
    • PDO扩展:
    $dsn = 'mysql:dbname=testdb;host=127.0.0.1';
    $user = 'dbuser';
    $password = 'dbpass';
    $dbh = new PDO($dsn, $user, $password);
    
    • 测试链接本地数据库:
    <?php
    // mysql数据库连接,需要指定数据库的地址,用户名及密码
    $link = mysql_connect('127.0.0.1', 'root', '123') or die('数据库连接失败');
    // 选择一个数据库
    mysql_select_db('mysql');
    // 设置当前连接使用的字符编码为utf-8
    mysql_query("set names 'utf8'");
    // 采用mysql_query加sql语句的形式向数据库发送查询指令
    $result = mysql_query('select * from user limit 1');
    $row = mysql_fetch_assoc($result);
    print_r($row);
    
    • 对于查询类的语句会返回一个资源句柄(resource),可以通过该资源获取查询结果集中的数据mysql_fetch_array()函数从结果集中取得一行作为关联数组或者索引数组
    // 从结果集中取出一条记录
    $row = mysql_fetch_array($res);
    var_dump($row);
    

    1、mysql_fetch_array 从结果集取出一行数组作为关联数组索引数组; 可通过设定参数来更改行数据的下标,默认的会包含数字索引的下标以及字段名的关联索引下标;即可通过设定参数MYSQL_NUM只获取数字索引数组,等同于mysql_fetch_row()函数,若设定参数为MYSQL_ASSOC,则只获取关联索引数组,等同于mysql_fetch_assoc()函数。
    2、mysql_fetch_row 从结果集取出一行数组作为数字索引数组
    3、mysql_fetch_assoc 从结果集取出一行数组作为关联索引数组

    • 关联索引数组:键是字符串数字索引数组:键是自然数
    $row = mysql_fetch_row($result);
    $row = mysql_fetch_array($result, MYSQL_NUM); //索引数组
    $row = mysql_fetch_assoc($result);
    $row = mysql_fetch_array($result, MYSQL_ASSOC); // 
    

    4、若要获取数据集中的所有数据,可以通过循环来遍历整个结果集

    $data = array();
    while ($row = mysql_fetch_array($result)) { // 获取下一条数据
        $data[] = $row;
    }
    
    • 默认的,PHP使用最近的数据库连接执行查询,但若存在多个连接的情况,则可以通过参数指令从那个连接中进行查询。
    <?php
    $link1 = mysql_connect('127.0.0.1', 'root', '');
    $link2 = mysql_connect('127.0.0.1', 'root', '', true); //开启一个新的连接
    $res = mysql_query('select * from user limit 1', $link1); //从第一个连接中查询数据
    
    • 增加新数据到数据库中
    $sql = "insert into col(name) values('李四')";
    mysql_query($sql); //执行插入语句
    
    • 在mysql中,执行插入语句以后,可以得到自增的主键id,通过PHP的mysql_insert_id()函数可以获取该id,其通常用来判断是否插入成功,或者作为关联ID进行其他的数据操作。
    $uid = mysql_insert_id();
    
    • 通常数据都是存储在变量或者数组中,因此sql语句需要先进行字符串拼接得到。
    <?php
    $name = '李四';
    $age = 18;
    $class = '高三一班';
    $sql = "insert into user(name, age, class) values('$name', '$age', '$class')";
    mysql_query($sql); //执行插入语句
    
    • 分页查询:通过mysql的limit可以很容易实现分页,limit m,n表示从m行后取n行数据。假定当前页为$page,每页显示$n条数据,那么$m为当前页前面所有的数据,即$m = ($page-1) * $n。那么sql语句实现分页的原理如下:
    <?php
    $page = 2;
    $n = 2;
    $m = ($page - 1) * $n;
    $sql = "select * from user limit $m, $n";
    $result = mysql_query($sql);
    //循环获取当前页的数据
    $data = array();
    while ($row = mysql_fetch_assoc($result)) {
        $data[] = $row;
    }
    
    • 对于删除与更新操作,可以通过mysql_affected_rows()函数来获取更新过的数据行数,若数据没有变化,则结果为0。
    • 当数据库操作完成以后,可以使用mysql_close()关闭数据库连接。默认地,当PHP执行完毕以后,会自动地关闭数据库连接
    • 在存在多个数据库连接的情况下,可以设定连接资源参数来关闭指定的数据库连接
    <?php
    $link = mysql_connect($host, $user, $pass);
    mysql_close($link);
    

    相关文章

      网友评论

          本文标题:php学习笔记(六)

          本文链接:https://www.haomeiwen.com/subject/scihsctx.html