php中PDO

PDO的访问流程图在这里插入图片描述

开启PDO只需要在php.ini配置文件中开启php_pdo_mysql.dll即可,PDO是一个第三方的类,默认已经集成到PHP中了。

<?php
  
    //数据库配置信息
    $dsn = "mysql:host=127.0.0.1;port=3306;dbname=video;charset=utf8";
    $username = "root";
    $password = "root";
    //创建PDO类的对象
    $pdo = new PDO($dsn,$username,$password);
    
    //执行插入的SQL语句
    //   $sql = "insert into video_label VALUES(22,1,'av',0,'area')";
    //   $records = $pdo->exec($sql);
 
    //执行查询的SQL语句,返回结果集对象(PDOStatement类)
    // $sql = "SELECT * FROM video_label ORDER BY id DESC";
    // $PDOStatement = $pdo->query($sql);
    // var_dump($PDOStatement);

    //设置PDO属性:设置从结果集提取数组的类型为关联数组
    // $pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
    // //执行查询的SQL语句,执行成功返回结果集对象(PDOStatement类)
    // $sql = "SELECT * FROM video_label";
    // $PDOStatement = $pdo->query($sql);
    // //遍历结果集对象,取出每一行数据(一维数组)
    // foreach($PDOStatement as $arr)
    // {
    //     print_r($arr);
    // }

    //执行查询的SQL语句,执行成功返回结果集对象(PDOStatement类)
    $sql = "SELECT * FROM video_label";
    $PDOStatement = $pdo->query($sql);
    //从结果集对象循环取出所有行数据
    // while($arr = $PDOStatement->fetch(PDO::FETCH_NUM))
    // {
    //     print_r($arr);	
    // }

    //从结果集对象获取多行数据
    // $arrs = $PDOStatement->fetchAll(PDO::FETCH_ASSOC);
    // print_r($arrs);

    //执行查询的SQL语句,执行成功返回结果集对象(PDOStatement类)
    $sql = "SELECT * FROM video_label";
    $PDOStatement = $pdo->query($sql);
    //获取查询记录数
    $records = $PDOStatement->rowCount();
    echo "总记录为{$records}条!";
PDO支持三种错误模式

静默模式(Silent):错误发生后,不会主动报错,是默认的模式;
警告模式(Warning):错误发生后,通过PHP标准来报告错误;
异常模式(Exception):错误发生后,抛出异常,需要捕捉和处理;
提示:可以通过 PDO::setAttribute() 更改错误模式。

<?php
  
    //数据库配置信息
    $dsn = "mysql:host=127.0.0.1;port=3306;dbname=video;charset=utf8";
    $username = "root";
    $password = "root";
    //创建PDO类的对象
    $pdo = new PDO($dsn,$username,$password);
    
    //执行查询的SQL语句,执行成功返回结果集对象(PDOStatement类)
    // $sql = "SELECT * FROM video_label WHERE id=abc";
    // $PDOStatement = $pdo->query($sql);
    // //获取错误信息
    // echo "错误编号:".$pdo->errorCode();
    // echo "<br>错误信息:";
    // print_r($pdo->errorInfo());

    //设置错误报告模式为:警告模式
    // $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
    // //执行查询的SQL语句,执行成功返回结果集对象(PDOStatement类)
    // $sql = "SELECT * FROM video_label WHERE id=abc";
    // $PDOStatement = $pdo->query($sql);

    //设置错误报告模式为:异常模式
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    try{
        //执行查询的SQL语句,执行成功返回结果集对象(PDOStatement类)
        $sql = "SELECT * FROM video_label WHERE id=abc";
        $PDOStatement = $pdo->query($sql);
    }catch(Exception $error)
    {
        //输出异常信息
        echo "错误编号:".$error->getCode();
        echo "<br>错误行号:".$error->getLine();
        echo "<br>错误文件:".$error->getFile();
        echo "<br>错误信息:".$error->getMessage();
    }
SQL语句执行过程

SQL语句的执行,分成两个阶段:编译和执行。
如果SQL语句,是第1次执行,先编译再执行。编译过程十分复杂,耗用系统资源,相对不太安全;
如果SQL语句(即相同的SQL语句),是第2次执行,直接从缓存中读取,无疑执行效率是最高的,也是比较安全的,可以有效避免SQL注入等安全问题;

代码示例

<?php
//数据库配置信息
$dsn = "mysql:host=127.0.0.1;port=3306;dbname=itcast;charset=utf8";
$username = "root";
$password = "root";

//创建PDO类的对象
$pdo = new PDO($dsn,$username,$password);

//制作相同结构的SQL语句,数据部分用占位符代替
$sql = "INSERT INTO student(name,salary,bonus,city) VALUES(?,?,?,?)";

//预编译相同结构的SQL语句(含有占位符),如果是相同的sql语句则从缓存中获取,不会执行这条预编译语句
$PDOStatement = $pdo->prepare($sql);

//给问号(?)占位符绑定数据:1对应第1个问号,2对应第2个问号,以此类推...
$PDOStatement->bindValue(1,'张四五');
$PDOStatement->bindValue(2,9000);
$PDOStatement->bindValue(3,900);
$PDOStatement->bindValue(4,'山西省');

//执行绑定数据预处理SQL语句
$PDOStatement->execute();
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值