• PHP的PDO 基本使用(简)


    ①【PDO是啥】:

    PDO是PHP 5新加入的一个重大功能,因为在PHP 5以前的php4/php3都是一堆的数据库扩展来跟各个数据库的连接和处理,什么 php_mysql.dll、php_pgsql.dll、php_mssql.dll、php_sqlite.dll等等扩展来连接MySQL、PostgreSQL、MS SQL Server、SQLite,同样的,我们必须借助 ADOdb、PEAR::DB、PHPlib::DB之类的数据库抽象类来帮助我们,无比烦琐和低效,毕竟,php代码的效率怎么能够我们直接用C/C++写的扩展斜率高捏?所以嘛,PDO的出现是必然的,大家要平静学习的心态去接受使用,也许你会发现能够减少你不少功夫哦。
    

    ②【为什么要使用PDO】?
    PDO是PHP5新加入的一个重大功能,我们的数据库服务器为MySQL,所有的程序代码的数据库操作全是一mysql()或者mysqli()函数来操作,当我们的数据库 需要更换时比如换成,SQL、SERVER、PostgreSQL、MS 等,我们不可能去修改所有的程序代码!所以就要用到PDO,PDO很好的帮我们解决了这个问题,使用PDO操作非常方便,只需要修改数据源格式,和加载相应的驱动文件到PHP.ini即可;

    ③【PDO的特点】?
    1)编码的一致性
    由于PHP可用的各种数据库扩展是由不同发行者编写的,所以尽管所有的扩展都提供了基本相同的特性,却不 满 足编码的一致性。PDO消除了这种不一致,提供了可用于各种数据库的单一接口;
    2)灵活性
    因为PDO在运行时加载必须的数据库驱动程序,所以不需要在每次使用不同数据库时重新配置和重新编译PHP。例如,如果数据库需要从SQL切换到MySQL,只需要加载PDO_MYSQL驱动程序就可以了。
    3)面向对象特性
    PDO利用PHP5的面向对象特性,可以获得更强大、更高效的数据库通信。
    4)高性能
    PDO是用C编写的,编译为PHP,与用PHP编写的其他解决方案相比,虽然其他都相同,但提供了更高的性能。
    二、PDO基本使用
    1、PDO的配置
    1)修改php.ini,添加MySQL的PDO扩展
    打开PHP配置文件php.ini,找到php_pdo_mysql.dll这行去掉钱买你的分号

    下面有一堆类似 ;extension=php_mbstring.dll 的东西,这里就是PHP扩展加载的配置了,我们再最后面添加上我们PDO的扩展:
    extension=php_pdo.dll
    extension=php_pdo_mysql.dll
    extension=php_pdo_pgsql.dll
    extension=php_pdo_sqlite.dll
    extension=php_pdo_mssql.dll
    extension=php_pdo_odbc.dll
    extension=php_pdo_firebird.dll
    ;extension=php_pdo_oci8.dll
    2)扩展目录中要有相应的扩展文件
    打开PHP配置文件php.ini,找到extension_dir,这个就是我们扩展存在的目录,首先去掉前面的分号,然后修改扩展目录,我的扩展目录是在"E:/Web/php/ext",就改成extension_dir=“E:/Web/php/ext”。
    3)PDO连接不同的数据,要有不同的数据库驱动文件,即我们所加入配置文件的扩展
    4)重新启动服务器,IIS/Apache,我的是apache,使配置生效
    2、数据源配置的格式
    1)数据源格式
    (1)连接数据库、数据库的用户名、数据库的密码
    语法:$dsn =“数据库类型:dbname=数据库名;host=数据库的域名”;
    $user = “数据库的用户名”;
    password="";password = "数据库的密码"; 例:dsn = “mysql:dbname=test;host=127.0.0.1”;
    $user = “root”;
    $password=“123456”;
    (2)声明对象
    object=newPDO(object = new PDO(dsn,user,user,password);
    3、方法讲解
    1)添加
    主要思路:
    (1)连接数据库、数据库的用户名、数据库的密码
    (2)生成PDO对象
    (3)执行添加
    实现代码如下:

    <?php  
    header('content-type:text/html;charset=utf8');  
    //连接数据库  
    $dsn="mysql:dbname=test;host=127.0.0.1";  
    //数据库的用户名  
    $user="root";  
    //数据库的密码  
    $password="123456";  
    //生成PDO对象  
    $object = new PDO($dsn,$user,$password);  
    //执行添加  
    $sql="insert into student(`name`,`sex`,`sex`) values('zhangsan','男','18')";  
    if($object->exec($sql)){  
        echo '添加成功';  
    }  
    

    注释:exec主要用于执行没有返回结果集的操作,比如insert、delete、update,返回的是影响的记录条数
    2)查询
    (1)查询方式一:
    主要思路:
    (1)连接数据库、数据库的用户名、数据库的密码
    (2)生成PDO对象
    (3)执行查询
    实现代码:

    <?php  
    header('content-type:text/html;charset=utf8');  
    //连接数据库  
    $dsn="mysql:dbname=test;host=127.0.0.1";  
    //数据库的用户名  
    $user="root";  
    //数据库的密码  
    $password="123456";  
    //生成PDO对象  
    $object = new PDO($dsn,$user,$password);  
      
    $sql="select * from student";  
    $result = $object->query($sql);  
    while($arr=$result->fetch()){  
        print_r($arr);  
    }  
    

    在这里插入图片描述

    也可以这样 如下:

    $data=$result->fetchAll();  
    print_r($student_info);  
    

    输出结果为二维数组

    在这里插入图片描述

    注释:
    1、query()执行查询语句,返回结果集对象;
    2、用循环利用fetch()方法逐个的取出记录,返回的是关联数组和索引数组两种数组,和mysql_fetch_array()的返回结果一致
    3、fetchAll()方法可以一次取出结果集中所有的数组,以二维数组的形式返回,但仍然是关联数组和索引数组两种数组

        数字索引和关联索引都有,属于浪费资源,我们只需要关联索引:还可用用一下方式查询:
    
    $object->setAttribute(PDO::ATTR_CASE, PDO::CASE_UPPER);  
    $result = $object->query($sql);  
    $result->setFetchMode(PDO::FETCH_ASSOC);  
    $result_array = $result->fetchAll();  
    print_r($result_array);     
    

    注释:

    setAttribute()方法是设置部分属性,主要属性有:PDO::ATTR_CASE、PDO::ATTR_ERRMODE等,我们设置的是PDO::ATTR_CASE(使用关联索引获取数据)

    PDO::CASE_UPPER是设置关联索引为大写,

    PDO::CASE_LOWER – 强制列名为小写

    PDO::CASE_NATURAL – 列名按照原始方式

    PDO::CASE_UPPER – 强制列名为大写

    setFetchMode()方法设置获取结果集的返回值类型,同样类型还有:

    PDO::FETCH_ASSOC --关联数组形式

    PDO::FETCH_NUM – 数字索引形式数组

    PDO::FETCH_BOTH --两者数组形式都有

    PDO::FETCH_OBJ – 按照对象的形式,类似于以前的mysql_fetch_object()

    1. PDO 操作数据库
      pdo 与 mysqli 一样,也是php的一个扩展,但是其能够连接多个数据库

    8.1 执行增加、修改和删除
    执行上面三种操作,需要调用 exec 方法,此方法返回受影响的函数

    <?php
    $dsn="mysql:host=localhost;dbname=test";
    $user="root";
    $pwd="root";
    
    $pdo=new PDO($dsn,$user,$pwd);
    
    // 执行 CUD
    $sql="insert into news(title,create_time) values('aa',now())";
    $sql="update news set title='bb' where id>=114";
    $sql="delete from news where id>=114";
    $numb=$pdo->exec($sql);
    echo $numb;
    

    8.2 执行查询
    8.2.1 逐行读取
    逐行读取需要调用 fetch 方法,每调用一次,读取1行

    
    <?php
    $dsn="mysql:host=localhost;dbname=test";
    $user="root";
    $pwd="root";
    
    $pdo=new PDO($dsn,$user,$pwd);
    // 执行查询
    $sql="select * from news";
    // 查询成功,返回 PDOStatement对象,失败返回false
    $res=$pdo->query($sql);
    /**
     * fetch 方法参数
     * 1)PDO::FETCH_ASSOC:表示关联数组
     * 2) PDO::FETCH_NUM:返回索引数组
     * 3) PDO::FETCH_OBJ:返回对象
     */
    while($row=$res->fetch(PDO::FETCH_OBJ)){
      echo '<pre>';
      print_r($row);
      echo "</pre>";  
    }
    

    说明:

    fetch 方法参数

    PDO::FETCH_ASSOC:表示关联数组
    PDO::FETCH_NUM:返回索引数组
    PDO::FETCH_OBJ:返回对象
    8.2.2 读取所有行

    $rows=$res->fetchAll(PDO::FETCH_ASSOC);
    echo '<pre>';
    print_r($rows);
    echo '</pre>';
    8.2.3 读取指定列
     // 读取指定列
    
    echo $res->fetchColumn(1);
    echo $res->fetchColumn(1);
    echo $res->fetchColumn(1);
    
  • 相关阅读:
    最后之作-Last Order(bushi
    Hydra's plan
    CSP-S2019游记
    题解 P1407
    初赛排序知识
    题解 洛谷P3469
    二分图网络流知识总结
    题解 SGU294 He's Circles
    noip复习——逆元
    noip复习——线性筛(欧拉筛)
  • 原文地址:https://www.cnblogs.com/wjlbk/p/12633511.html
Copyright © 2020-2023  润新知