zoukankan      html  css  js  c++  java
  • php pdo链接数据库和查询数据

    1.连接数据库

    <?php
      //$host-地址,$name-数据库名称 ,$user-用户名 ,$pwd-密码
      try{ 
            $pdo=new PDO("mysql:host=".$host.";port=3306;dbname=".$name."",$user,$pwd);
            $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);  //第一个是设置错误报错,第二个是将错误报告通过异常抛出,如果不设置则报错不会抛出异常直接false
            $pdo->exec("set names utf8");                                  //设置字符集
      } catch(PDOException $e){                                 //pdo会向PDOException抛出异常,通过Exception接收也可以
            die($e->getMessage());
      }

    上面是比较规范的写法,其实pdo连接数据库可以简单的写成

    $pdo=new PDO("mysql:host=".$host.";dbname=".$name."",$user,$pwd); 

    2.执行sql语句,pdo执行sql语句一般有三种方法exec,prepare,query

        1).exec不返回结果集,只返回受影响的行数,一般用于update  insert delete

    $rs=$pdo->exec("insert p_admin (realname,age,height) values('张飞','25','177')");
    var_dump($rs);die;

    结果如下

       2)prepare预加载方法,返回结果集,要多一步,据说可以防止sql注入

    $pdo=new PDO("mysql:host=".$host.";port=3306;dbname=".$name."",$user,$pwd);
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $pdo->exec("set names utf8");
    $sql="select * from p_admin where id=1";
    $rt=$pdo->prepare($sql);
    $rt->execute();           //多一步 
    $rs=$rt->fetchall();     //fetchall 是pdo自带的方法--也可以用foreach方法
    var_dump($rs);
    die;

    结果如下:

      

    3)query方法 返回结果集 

    $pdo=new PDO("mysql:host=".$host.";port=3306;dbname=".$name."",$user,$pwd);
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $pdo->exec("set names utf8");
    $sql="select * from p_admin where id=1";
    $rt=$pdo->query($sql);
    $rs=$rt->fetchall();       //也可以用foreach
    var_dump($rs);
    die;

    结果如下

     题外话:

        1. 获取最近的一次insert的id可以用$pdo->lastInsertId() 

        2.不管是prepare还是query,返回的都是一个对象,我们除了用用fetchall()方法获取数据外,还可以用foreach遍历

    $pdo=new PDO("mysql:host=".$host.";port=3306;dbname=".$name."",$user,$pwd);
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $pdo->exec("set names utf8");
    $sql="select * from p_admin where id=1";
    $rt=$pdo->query($sql);
    foreach($rt as $k => $v){
        foreach($v as $k2=> $v2){
            $rs[$k][$k1]=$v2;
        }
    }
    var_dump($rs);
    die;

    那么$rt到底是个什么东西呢?

    打印看一下

    是一个对象,其中并没有我们需要的数据,那么foreach出来的数据从哪来的呢?推测可能是通过迭代器迭代出来的,参考网址

    https://www.jb51.net/article/131707.htm

    https://www.jb51.net/article/159569.htm

    https://www.cnblogs.com/wwjchina/p/7723499.html

        

  • 相关阅读:
    ruby 正则表达式 匹配中文
    ruby 正则表达式 匹配所有符合规则的信息
    MobileNetV2: Inverted Residuals and Linear Bottlenecks
    MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications
    SqueezeNet: AlexNet-level accuracy with 50x fewer parameters and <0.5MB model size
    LeetCode 409——最长回文串
    LeetCode 516——最长回文子序列
    LeetCode 5——最长回文子串
    LeetCode 300——最长上升子序列
    动态规划之——最长公共子串和矩阵链乘法
  • 原文地址:https://www.cnblogs.com/flyyu/p/14133852.html
Copyright © 2011-2022 走看看