zoukankan      html  css  js  c++  java
  • 11.7 (下午)开课二个月零三天 (PDO)

    PDO访问方式操作数据库

     

      mysqli是专门访问MySQL数据库的,不能访问其它数据库。PDO可以访问多种的数据库,它把操作类合并在一起,做成一个数据访问抽象层,这个抽象层就是PDO,根据类操作对应的数据库。mysqli是一个类,PDO也是一个类,只不过PDO这个类功能更加强大。

    PDO的功能 1.访问不同的数据库 2.自带事务功能。事务是指同时执行几条sql语句,但是其中1条语句出了错无法执行,那么所有的就都执行失败。 3.防止SQL注入攻击。

    1.访问不同数据库

    下面代码是访问MySQL数据库的,如果访问其它数据库,只需要在造对象中更改数据库驱动mysql,换成其它数据库的驱动。

    复制代码
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>无标题文档</title>
    </head>
    
    <body>
    复制代码
    <?php
    //PDO的用法
    //1.造对象
    $dsn = "mysql:dbname=text1;host=localhost";
    //mysql是指MySQL数据库的驱动名,加上冒号,冒号后面是数据库的名称。
    //host是服务器的地址,为localhost。
    //如果要使用其它数据库,要更改数据库的驱动名。可以从php手册开面找。
    //写的驱动一定是配好环境的驱动。可以在浏览器地址栏里输入服务器地址localhost查找支持的数据库驱动。
    $pdo = new PDO($dsn,"root","666");
    //参数:1.服务器的地址2.数据库的名称3.服务器密码
    
    //写sql语句
    $sql = "update nation set name='兽族' where code='n003'";
    
    //执行sql语句
    //$r = $pdo->exec($sql);//返回受影响的条数
    ?>
    复制代码
    </body>
    </html>
    复制代码

    2.事务功能

    复制代码
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>无标题文档</title>
    </head>
    
    <body>
    复制代码
    <?php
    //1.造对象
    $dsn = "mysql:dbname=text1;host=localhost";
    $pdo = new PDO($dsn,"root","666");
    
    //设置异常模式,如果出现错误,抛个异常出来。2个参数不要加双引号。
    $pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
    
    //写sql语句
    $sql1 = "insert into nation values('noo5','人族')";
    $sql2 = "insert into nation values('noo6','精灵族')";
    
    //执行2条sql语句
    try//try代表加事务
    {
        $pdo->beginTransaction();//启动事务
        
        $pdo->exec($sql1);
        $pdo->exec($sql2);
        
        $pdo->commit();//提交事务
    }
    catch(PDOException $e)//抓住出现的异常。$e代表抓住的异常,异常保存在$e里面。
    {
        //$e->getMessage();//获取错误信息。
        $pdo->rollBack();//回滚,如果一个地方出现错误,回到总体操作之前。
    }
    
    
    ?>
    复制代码
    </body>
    </html>
    复制代码

    3.防止注入

    (1)占位方式为?

    复制代码
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>无标题文档</title>
    </head>
    
    <body>
    复制代码
    <?php
    //防止sql注入
    
    //1.造对象
    $dsn = "mysql:dbname=text1;host=localhost";
    $pdo = new PDO($dsn,"root","666");
    
    //写sql语句,预处理语句。
    $sql = "insert into nation values(?,?)";//变量先不写,先用?占住位置。先把这条语句发过去。
    
    //准备sql语句,返回statement对象。
    $st = $pdo->prepare($sql);
    
    /*//绑定参数
    $st->bindParam(1,$code);//从1开始索引。
    $st->bindParam(2,$name);
    
    $code="n002";//也可以在前面赋值。
    $name="矮人族";
    
    //提交执行
    $st->execute();//调用这个方法就可以执行了,括号里面不用给sql语句了,sql语句已经传过去了。
    */
    
    $attr = array("n007","魔族");//造一个数组,数组里面要和添加的内容对应起来。这2行相当于上面/**/标记的4行内容。
    
    //提交执行
    $st->execute($attr);//直接把数组放在执行的里面。
    
    //预处理里面用?占位的,给数组的时候要给索引数组,并且数组里的内容要和要添加的内容对应起来。
    
    ?>
    复制代码
    </body>
    </html>
    复制代码

    (2)占位方式为name

    复制代码
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>无标题文档</title>
    </head>
    
    <body>
    复制代码
    <?php
    //防止sql注入
    
    //1.造对象
    $dsn = "mysql:dbname=text1;host=localhost";
    $pdo = new PDO($dsn,"root","666");
    
    //写sql语句,预处理语句。使用name占位。
    $sql = "insert into nation values(:code,:name)";//前面要加冒号,不加冒号会被当成普通的变量
    
    //准备执行
    $st = $pdo->prepare($sql);
    
    /*//绑定参数
    $st->bindParam(":code",$code,PDO::PARAM_STR);//PDO::PARAM_STR表示必须是一个字符串
    $st->bindParam(":name",$name,PDO::PARAM_STR);
    
    $code="no12";
    $name="狼族";
    
    //执行
    $st->execute();*/
    
    $attr = array("code"=>"n025","name"=>"虫族");//name占位,要用关联数组。
    
    //执行
    $st->execute($attr);
    
    ?>
    复制代码
    </body>
    </html>
    复制代码

    4.读取数据

    复制代码
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>无标题文档</title>
    </head>
    
    <body>
    复制代码
    <?php
    //1.造对象
    $dsn = "mysql:dbname=text1;host=localhost";
    $pdo = new PDO($dsn,"root","666");
    
    //写sql语句,预处理语句。使用name占位。
    $sql = "select * from nation";//前面要加冒号,不加冒号会被当成普通的变量
    
    //准备执行
    $st = $pdo->prepare($sql);
    
    //执行
    $st->execute();
    
    //读数据
    //var_dump($st->fetch());//输出结果为第一条,可以用while循环全部读取出来。
    //var_dump($st->fetch(PDO::FETCH_ASSOC));//输出的是关联数组
    //var_dump($st->fetch());//输出二维数组
    //var_dump($st->fetch(PDO::FETCH_ASSOC));//输出关联的二维数组
    ?>
    复制代码
    </body>
    </html>
    复制代码
  • 相关阅读:
    hdu 5224 Tom and paper 水题
    2015 UESTC 搜索专题N题 韩爷的梦 hash
    2015 UESTC 搜索专题M题 Palindromic String 马拉车算法
    2015 UESTC 搜索专题K题 秋实大哥の恋爱物语 kmp
    2015 UESTC 搜索专题J题 全都是秋实大哥 kmp
    2015 UESTC 搜索专题F题 Eight Puzzle 爆搜
    2015 UESTC 搜索专题E题 吴队长征婚 爆搜
    2015 UESTC 搜索专题D题 基爷的中位数 二分
    2015 UESTC 搜索专题C题 基爷与加法等式 爆搜DFS
    2015 UESTC 搜索专题B题 邱老师降临小行星 记忆化搜索
  • 原文地址:https://www.cnblogs.com/l5580/p/6065741.html
Copyright © 2011-2022 走看看