• 数据库抽象层PDO


    通过数据库抽象层PDO可以访问多个数据库

    //数据库抽象层PDO
    //造DSN:驱动名:dbname=数据库名;host=服务器地址
    $dsn = "mysql:dbname=mydb;host=localhost";
    //造PDO对象
    $pdo = new PDO($dsn,"root","xiao8888");
    //写SQL语句
    $sql = "select * from Info";
    //执行SQL语句      //我们不这样执行,我们用预处理
    //$v =$pdo->query($sql);
    //返回的对象比较特殊,可以用循环遍历
    
    //预处理:先把SQL语句放到服务器上等待我们给他指令去执行
    //准备一条SQL语句
    $stm = $pdo->prepare($sql);
    //执行准备好的SQL语句
    if($stm->execute())
    {
        //1.逐行取数据
        var_dump($stm->fetch());    
        //2.取所有数据
        var_dump($stm->fetchAll());                  //包含关联数组与索引数组
        var_dump($stm->fetchAll(PDO::FETCH_ASSOC));  //返回关联数组
        var_dump($stm->fetchAll(PDO::FETCH_NUM));    //返回索引数组
        var_dump($stm->fetchAll(PDO::FETCH_OBJ));    //返回对象
        //3.取某一列
        var_dump($stm->fetchColumn(1));
        //4.返回对象
        var_dump($stm->fetchObject());
    }
    else
    {
        echo "执行失败!";    
    }

    我们在预处理时可以设置参数,然后给参数绑定值,但这种方法太复杂,不推荐使用,了解即可。例如:

    //造对象
    $dsn = "mysql:dbname=mydb;host=localhost";
    $pdo = new PDO($dsn,"root","xiao8888");
    //写SQL语句,参数用?或者字符串代替
    $sql= "insert into Nation vlaues(?,?)"; //问号绑定的是索引数组
    $sql= "insert into Nation vlaues(:code,:name)";//字符串绑定的是关联数组
    
    //预处理
    $stm = $pdo->prepare($sql);
    
    //给参数绑定值    太复杂,不推荐
    $stm->bindParam(1,$code);//索引数组
    $stm->bindParam(2,$name);
    
    $stm->bindParam("code",$code,PDO::PARAM_STR);//关联数组
    $stm->bindParam("name",$name,PDO::PARAM_STR);
    $code = "p007"; $name = "回族"; //执行 if($stm->execute()) { echo "添加成功!"; } else { echo "添加失败!"; }

    我们可以用数组自动绑定参数,例如:

    //造对象
    $dsn = "mysql:dbname=mydb;host=localhost";
    $pdo = new PDO($dsn,"root","xiao8888");
    //写SQL语句,参数用?或者字符串代替
    $sql= "insert into Nation vlaues(?,?)"; //问号绑定的是索引数组
    $sql= "insert into Nation vlaues(:code,:name)";//字符串绑定的是关联数组
    //预处理
    $stm = $pdo->prepare($sql);
    //造数组
    $attr = array("n006","藏族");
    $attr = array("code"=>"n006","name"=>"藏族");
    //执行
    if($stm->execute($attr))
    {
        echo "添加成功!";    
    }
    else
    {
        echo "添加失败!";    
    }

     我们也可以将提交过来的值作为数组去执行SQL语句,这样在添加或修改数据的时候会非常方便。例如:

    先做一个简单的添加页面:

    <form action="Add.php" method="post">
    <input type="text" name="code" />
    <input type="text" name="name" />
    <input type="submit" value="添加" />
    </form>

    再做一个处理页面:

    <?php 
    //造对象
    $dsn = "mysql:dbname=mydb;host=localhost";
    $pdo = new PDO($dsn,"root","xiao8888");
    //写SQL语句
    $sql = "insert into Nation values(:code,:name)";
    //预处理
    $stm = $pdo->prepare($sql);
    //执行
    if($stm->execute($_POST))
    {
        echo "添加成功!";
    }
    else
    {
        echo "添加失败!";    
    }

    我们可以将PDO做成方法封装在数据库类里面,使之更加完善。

    <?php
    class DB
    {
        public $host="localhost";  //服务器地址     默认值为localhost
        public $uid="root";        //数据库用户名   默认值为root
        public $pwd="123";         //数据库密码     默认值为123
    /*数据库抽象层PDO,可以从其他驱动访问数据库 参数: $sql: SQL语句 $type: SQL语句类型,默认为0,代表查询语句,1代表其他语句 $qdm: 驱动名,默认为mysql $db: 数据库名,默认为mydb*/ public function QueryPDO($sql,$type=0,$qdm="mysql",$db="mydb") { //1.造DSN $dsn="$qdm:dbname=$db;host=$this->host"; //2.造PDO对象 $pdo=new PDO($dsn,$this->uid,$this->pwd); //3.预处理 //准备一条SQL语句 $stm =$pdo->prepare($sql); //执行SQL语句 $stm->execute(); if($type==0) { return $stm->fetchAll(); } else { return $stm->execute(); } }
    }

  • 相关阅读:
    HDU 3835 R(N)
    HDU 2498 Digits
    HUST 1027 Enemy Target!
    【POJ 3714】 Raid
    【POJ 2965】 The Pilots Brothers' refrigerator
    【POJ 2054】 Color a Tree
    【POJ 1328】 Radar Installation
    【POJ 3190】 Stall Reservations
    【POJ 3614】 Sunscreen
    【BZOJ 3032】 七夕祭
  • 原文地址:https://www.cnblogs.com/xinghun/p/5496835.html
Copyright © 2020-2023  润新知