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

 

 

    

 

posted @ 2020-12-14 16:12  会飞的-余  阅读(185)  评论(0编辑  收藏  举报