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