zoukankan      html  css  js  c++  java
  • 数据库抽象层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 1455 N个短木棒 拼成长度相等的几根长木棒 (DFS)
    hdu 1181 以b开头m结尾的咒语 (DFS)
    hdu 1258 从n个数中找和为t的组合 (DFS)
    hdu 4707 仓鼠 记录深度 (BFS)
    LightOJ 1140 How Many Zeroes? (数位DP)
    HDU 3709 Balanced Number (数位DP)
    HDU 3652 B-number (数位DP)
    HDU 5900 QSC and Master (区间DP)
    HDU 5901 Count primes (模板题)
    CodeForces 712C Memory and De-Evolution (贪心+暴力)
  • 原文地址:https://www.cnblogs.com/xinghun/p/5496835.html
Copyright © 2011-2022 走看看