PDO的访问流程图![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/0da5332c74edd36a463dbe685451a595.png)
开启PDO只需要在php.ini配置文件中开启php_pdo_mysql.dll即可,PDO是一个第三方的类,默认已经集成到PHP中了。
<?php
//数据库配置信息
$dsn = "mysql:host=127.0.0.1;port=3306;dbname=video;charset=utf8";
$username = "root";
$password = "root";
//创建PDO类的对象
$pdo = new PDO($dsn,$username,$password);
//执行插入的SQL语句
// $sql = "insert into video_label VALUES(22,1,'av',0,'area')";
// $records = $pdo->exec($sql);
//执行查询的SQL语句,返回结果集对象(PDOStatement类)
// $sql = "SELECT * FROM video_label ORDER BY id DESC";
// $PDOStatement = $pdo->query($sql);
// var_dump($PDOStatement);
//设置PDO属性:设置从结果集提取数组的类型为关联数组
// $pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
// //执行查询的SQL语句,执行成功返回结果集对象(PDOStatement类)
// $sql = "SELECT * FROM video_label";
// $PDOStatement = $pdo->query($sql);
// //遍历结果集对象,取出每一行数据(一维数组)
// foreach($PDOStatement as $arr)
// {
// print_r($arr);
// }
//执行查询的SQL语句,执行成功返回结果集对象(PDOStatement类)
$sql = "SELECT * FROM video_label";
$PDOStatement = $pdo->query($sql);
//从结果集对象循环取出所有行数据
// while($arr = $PDOStatement->fetch(PDO::FETCH_NUM))
// {
// print_r($arr);
// }
//从结果集对象获取多行数据
// $arrs = $PDOStatement->fetchAll(PDO::FETCH_ASSOC);
// print_r($arrs);
//执行查询的SQL语句,执行成功返回结果集对象(PDOStatement类)
$sql = "SELECT * FROM video_label";
$PDOStatement = $pdo->query($sql);
//获取查询记录数
$records = $PDOStatement->rowCount();
echo "总记录为{$records}条!";
PDO支持三种错误模式
静默模式(Silent):错误发生后,不会主动报错,是默认的模式;
警告模式(Warning):错误发生后,通过PHP标准来报告错误;
异常模式(Exception):错误发生后,抛出异常,需要捕捉和处理;
提示:可以通过 PDO::setAttribute() 更改错误模式。
<?php
//数据库配置信息
$dsn = "mysql:host=127.0.0.1;port=3306;dbname=video;charset=utf8";
$username = "root";
$password = "root";
//创建PDO类的对象
$pdo = new PDO($dsn,$username,$password);
//执行查询的SQL语句,执行成功返回结果集对象(PDOStatement类)
// $sql = "SELECT * FROM video_label WHERE id=abc";
// $PDOStatement = $pdo->query($sql);
// //获取错误信息
// echo "错误编号:".$pdo->errorCode();
// echo "<br>错误信息:";
// print_r($pdo->errorInfo());
//设置错误报告模式为:警告模式
// $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
// //执行查询的SQL语句,执行成功返回结果集对象(PDOStatement类)
// $sql = "SELECT * FROM video_label WHERE id=abc";
// $PDOStatement = $pdo->query($sql);
//设置错误报告模式为:异常模式
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
try{
//执行查询的SQL语句,执行成功返回结果集对象(PDOStatement类)
$sql = "SELECT * FROM video_label WHERE id=abc";
$PDOStatement = $pdo->query($sql);
}catch(Exception $error)
{
//输出异常信息
echo "错误编号:".$error->getCode();
echo "<br>错误行号:".$error->getLine();
echo "<br>错误文件:".$error->getFile();
echo "<br>错误信息:".$error->getMessage();
}
SQL语句执行过程
SQL语句的执行,分成两个阶段:编译和执行。
如果SQL语句,是第1次执行,先编译再执行。编译过程十分复杂,耗用系统资源,相对不太安全;
如果SQL语句(即相同的SQL语句),是第2次执行,直接从缓存中读取,无疑执行效率是最高的,也是比较安全的,可以有效避免SQL注入等安全问题;
代码示例
<?php
//数据库配置信息
$dsn = "mysql:host=127.0.0.1;port=3306;dbname=itcast;charset=utf8";
$username = "root";
$password = "root";
//创建PDO类的对象
$pdo = new PDO($dsn,$username,$password);
//制作相同结构的SQL语句,数据部分用占位符代替
$sql = "INSERT INTO student(name,salary,bonus,city) VALUES(?,?,?,?)";
//预编译相同结构的SQL语句(含有占位符),如果是相同的sql语句则从缓存中获取,不会执行这条预编译语句
$PDOStatement = $pdo->prepare($sql);
//给问号(?)占位符绑定数据:1对应第1个问号,2对应第2个问号,以此类推...
$PDOStatement->bindValue(1,'张四五');
$PDOStatement->bindValue(2,9000);
$PDOStatement->bindValue(3,900);
$PDOStatement->bindValue(4,'山西省');
//执行绑定数据预处理SQL语句
$PDOStatement->execute();