1、什么是PDO?
php data object ,php数据对象,PHP 数据对象 (PDO) 扩展为PHP操作多种数据库定义了一个轻量级的一致接口。实现 PDO 接口的每个数据库驱动可以公开具体数据库的特性作为标准扩展功能。 注意利用 PDO 扩展自身并不能实现任何数据库功能;必须使用一个 具体数据库的 PDO 驱动 来访问数据库服务。
PDO 提供了一个 数据访问 抽象层,这意味着,不管使用哪种数据库,都可以用相同的函数(方法)来查询和获取数据。 PDO 不提供 数据库 抽象层;它不会重写 SQL,也不会模拟缺失的特性。如果需要的话,应该使用一个成熟的抽象层。
2、为什么要使用PDO?
更换其他数据库的时候无需更换代码,提高了程序运行效率
3、PDO的特点是什么?
(1)、编码的一致性
(2)、灵活性
(3)、面向对象特性
(4)、高性能
使用PDO的好处是:从根本上防止SQL注入
4、如何使用PDO?
修改 php.ini中的配置 添加MYSQL的PDO扩展
(1) extension=php_pdo_mysql.dll 去前面的分号
(2) 扩展目录中要有相应的扩展文件
(3) PDO连接不同的数据库,要有不同的数据库驱动文件即我们所加入配置文件的扩展
(4) 重新启动Apache使配置生效
或者在PHPstudy中设置如下:
5、使用PDO的基本格式
(1) 格式
$host = "127.0.0.1"; // MySQL所在的服务器的IP
$port = "3306"; // MySQL的端口
$username= "root"; //数据库账号
$password = "123456"; //数据库密码
$dbname = "test"; // 数据库名称
$charset = "utf8"; // 编码集
$dsn = "mysql:dbname=$dbname;host=$host"; // $dsn =“数据库类型:dbname=数据库名;host=数据库的域名”;
备注: dsn: data sourse name数据的来源 ->要找的数据库是哪台电脑哪个数据库
(2) 声明对象:
$object = new PDO($dsn,$user,$password);
6、案例:
$host = "127.0.0.1";
$port = "3306"; //
$username = "root";
$password = "asdf1234";
$dbname = "tperp";
$charset = "utf8";
$dsn = "mysql:dbname=$dbname;host=$host";
try{
$pdo = new Pdo($dsn, $username, $password);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); // 设置sql语句查询如果出现问题 就会抛出异常
set_exception_handler("cus_exception_handler");
} catch(PDOException $e){
die("连接失败: ".$e->getMessage());
}
function cus_exception_handler($e)
{
die("sql 异常: ".$e->getMessage());
}
//查询数据
$state = $pdo->query("select * from admin_user where id = 1");
// query执行一条SQL语句,如果通过,则返回一个PDOStatement对象,可以直接遍历这个返回的记录集 (query用于select)
$res = $state->fetch(PDO::FETCH_ASSOC); // 获取结果集中的一行数据
$res = $state->fetchAll(PDO::FETCH_ASSOC); //获取结果集中的所有数据
//添加数据
$row1 = $pdo->exec("insert into admin_user(user_name, password) values('jack', 'adsfadf')");
// exec主要执行没有返回结果集的操作 PDO::exec执行一条SQL语句,并返回受影响的行数。此函数不会返回结果集合.。 (exec用于insert、delete、update)
//修改数据
$row2 = $pdo->exec("update admin_user set user_name = 'peter' where user_id = 50");
//删除数据
$row3 = $pdo->exec("delete from admin_user where user_id = 50");
var_dump($res,$row1,$row2,$row3);
预处理(防止SQL注入)
$state = $pdo->prepare("select * from tp_admin_user where user_id = ?");
$state->execute([49]);
$row = $state->fetch(PDO::FETCH_ASSOC); // 获取结果集中的一条
$rows = $state->fetchAll(PDO::FETCH_ASSOC); // 获取结果集中的所有
echo "<pre>";
var_dump($rows);