• 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>
    
  • 相关阅读:
    Eclipse+Pydev +Django搭建开发环境时容易出错的几点
    小白对于数据库的初步理解
    个人PC搭建自己的虚拟服务器
    xss 学习(一)
    python爬虫学习(一)
    php常用函数
    sqlmap基础命令
    metinfo 5.3.19 管理员密码重置
    nmap常用命令
    Web安全开发手册
  • 原文地址:https://www.cnblogs.com/ysdong/p/6058104.html
Copyright © 2020-2023  润新知