【深入使用】PHP的PDO 基本使用

前言:

PDO:数据库抽象层

简介:PDO扩展为PHP访问数据库定义了一个轻量级的、一致性的接口,PDO解决了数据库连接不统一的问题。是PHP 5新加入的一个重大功能
 

【为什么要使用PDO】?
PDO是PHP5新加入的一个重大功能,我们的数据库服务器为MySQL,所有的程序代码的数据库操作全是一mysql()或者mysqli()函数来操作,当我们的数据库 需要更换时比如换成,SQL、SERVER、PostgreSQL、MS 等,我们不可能去修改所有的程序代码!所以就要用到PDO,PDO很好的帮我们解决了这个问题,使用PDO操作非常方便,只需要修改数据源格式,和加载相应的驱动文件到PHP.ini即可;
 

主要内容:

二、PDO基本使用
1、PDO的配置
1)修改php.ini,添加MySQL的PDO扩展
打开PHP配置文件php.ini,找到php_pdo_mysql.dll这行去掉钱买你的分号

一、 PDO简介
1、PDO简介
(1)PHP的PDO(PHP Data Objects)是一种用于在PHP中访问数据库的扩展。它提供了一个统一的接口,使得开发人员可以使用相同的方式与不同类型的数据库进行交互,例如MySQL、PostgreSQL和SQLite等

(2)它与PHP5.1版本一起发布的,目前支持的数据库包括Firebird、FreeTDS、Interbase、MySQL、MS SQL Server、ODBC、Oracle、Postgre SQL、SQLite和Sybase。

(3)当操作不同数据库时,只需要修改PDO中的DSN数据库源,如$dsn = "mysql:host=$host;dbname=$dbname;charset=utf8mb4";) ,即可使用PDO的统一接口进行操作。

有了PDO,您不必再使用mysqli_*函数、oci_*函数或者mssql_*函数,也不必再为它们封装数据库操作类,只需要使用PDO接口中的方法就可以对各种数据库进行操作。
PDO是一个第三方的类,默认已经集成到PHP中了。
 

2、PDO特性

(1)数据库支持: PDO提供了对多种数据库的支持,包括MySQL、SQLite、PostgreSQL、Oracle等,因此你可以在不改变代码逻辑的情况下切换使用不同的数据库。

(2)面向对象的接口: PDO使用面向对象的编程接口,通过实例化PDO类来连接数据库,并使用PDOStatement类执行查询和操作。

(3)预处理语句: PDO支持预处理语句(prepared statements),这是一种在执行前将SQL查询与数据分离的方式。预处理语句可以提高性能,并提供了更好的安全性,防止SQL注入攻击。

(4)绑定参数: 使用PDO的预处理语句,你可以绑定参数到查询中,而不是直接将值插入到SQL语句中。这种方式可以有效地防止SQL注入,并允许您重复使用准备好的语句,只需更改绑定的参数即可。

(5)事务支持: PDO支持数据库事务,你可以使用beginTransaction()开始一个事务,然后通过commit()提交事务或使用rollback()回滚事务以撤消之前的更改。

(6)错误处理: PDO使用异常机制来处理数据库操作中的错误。你可以捕获和处理PDOException异常,以便在出现错误时采取适当的措施。

(7)多个结果集: 在某些数据库中,你可以执行返回多个结果集的查询。PDO提供了方法来访问和处理这些结果集。

(8)支持命名占位符和问号占位符: PDO支持使用命名占位符(如:name)或问号占位符(如?)进行参数绑定。

(9)元数据获取: PDO提供了获取数据库元数据的方法,如获取表结构、列信息等。

(10)数据库连接管理: PDO提供了对数据库连接的管理,包括连接池管理、连接参数设置等。
 

3、PDO支持的数据库

4、PDO的配置

配置php配置文件,开启相应扩展
extension=php_pdo.dll;

二、 PDO对象方法

1、对象方法:

2、代码案例    

1、连接到数据库:

<?php
$dsn="mysql:host=localhost;dbname=dbalitest";
$username="root";
$passwd="a6";
 
try {
	$pdo=new PDO($dsn,$username,$passwd);//数据源:代表连接那种数据库,数据库是什么。数据库管理工具的账号+密码
    // 设置错误模式为异常
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    echo "成功连接到数据库";
} catch (PDOException $e) {
    echo "连接数据库失败: " . $e->getMessage();
}

2、执行查询语句并获取结果集:

$query = "SELECT * FROM users";
$stmt = $pdo->query($query);
 
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
    echo $row['username'] . "<br>";
}

3、使用预处理语句执行带参数的查询:

$query = "SELECT * FROM users WHERE age > :age";
$stmt = $pdo->prepare($query);
 
$age = 18;
$stmt->bindParam(':age', $age, PDO::PARAM_INT);
$stmt->execute();
 
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
    echo $row['username'] . "<br>";
}

4、插入数据:

$query = "INSERT INTO users (username, email) VALUES (:username, :email)";
$stmt = $pdo->prepare($query);
 
$username = "john";
$email = "john@example.com";
 
$stmt->bindParam(':username', $username, PDO::PARAM_STR);
$stmt->bindParam(':email', $email, PDO::PARAM_STR);
 
$stmt->execute();

5、更新数据:

$query = "UPDATE users SET email = :email WHERE id = :id";
$stmt = $pdo->prepare($query);
 
$email = "newemail@example.com";
$id = 1;
 
$stmt->bindParam(':email', $email, PDO::PARAM_STR);
$stmt->bindParam(':id', $id, PDO::PARAM_INT);
 
$stmt->execute();

第一种连接pdo的方式:

<?php
try
{
	$dsn="mysql:host=localhost;dbname=mysql";
	$username="root";
	$passwd="a6";
	$pdo=new PDO($dsn,$username,$passwd);//数据源:代表连接那种数据库,数据库是什么。数据库管理工具的账号+密码
	var_dump($pdo);
}catch(PDOException $e)
{
	echo $e->getMessage();//错误信息
}

<?php
try
{
	$dsn="mysql:host=localhost;dbname=dbalitest";
	$username="root";
	$passwd="a6";
	$pdo=new PDO($dsn,$username,$passwd);//数据源:代表连接那种数据库,数据库是什么。数据库管理工具的账号+密码
	$sql=<<<EOF
		create table if not exists user(
			content varchar(30) not null
		);
EOF;
$res=$pdo->exec($sql);//执行一条sql语句,对于select没有作用
var_dump($res);
}catch(PDOException $e)
{
	echo $e->getMessage();//错误信息
}

<?php
try
{
	$dsn="mysql:host=localhost;dbname=dbalitest";
	$username="root";
	$passwd="a6";
	$pdo=new PDO($dsn,$username,$passwd);//数据源:代表连接那种数据库,数据库是什么。数据库管理工具的账号+密码
	$sql=<<<EOF
		create table if not exists user(
			content varchar(30) not null
		);
EOF;
$res=$pdo->exec($sql);//执行一条sql语句,对于select没有作用
var_dump($res);

$sql="insert into user(content) values('king')";//插入数据
$res=$pdo->exec($sql);
var_dump($res);




}catch(PDOException $e)
{
	echo $e->getMessage();//错误信息
}

<?php
try
{
	$dsn="mysql:host=localhost;dbname=dbalitest";
	$username="root";
	$passwd="a6";
	$pdo=new PDO($dsn,$username,$passwd);//数据源:代表连接那种数据库,数据库是什么。数据库管理工具的账号+密码
	$sql="select * from user";//实验错误码
	$res=$pdo->query($sql);//这个可以执行查询select
	var_dump($res);//得到一个object(PDOStatement),遍历才可以输出
	foreach($res as $row)
	{
		print_r($row);
	}
	
}catch(PDOException $e)
{
	echo $e->getMessage();//错误信息
}

<?php
try
{
	$dsn="mysql:host=localhost;dbname=dbalitest";
	$username="root";
	$passwd="alibaba123456";
	$pdo=new PDO($dsn,$username,$passwd);//数据源:代表连接那种数据库,数据库是什么。数据库管理工具的账号+密码
	$sql="select * from user";
	$sm=$pdo->prepare($sql);//预处理的意思是准备处理
	$res=$sm->execute();//通过这个方法处理
	$row=$sm->fetch();//得到结果的一条记录,所有记录:fetchAll()
	print_r($row);
	
}catch(PDOException $e)
{
	echo $e->getMessage();//错误信息
}

<?php
try
{
	$dsn="mysql:host=localhost;dbname=dbalitest";
	$username="root";
	$passwd="a6";
	$pdo=new PDO($dsn,$username,$passwd);//数据源:代表连接那种数据库,数据库是什么。数据库管理工具的账号+密码
	$sql="select * from user";
	$sm=$pdo->prepare($sql);
	$res=$sm->execute();
	if($res)//直到没有数据才停止循环
	{
		while($row=$sm->fetch())
		{
			print_r($row);
		}
	}
}catch(PDOException $e)
{
	echo $e->getMessage();//错误信息
}

<?php
try
{
	$dsn="mysql:host=localhost;dbname=dbalitest";
	$username="root";
	$passwd="a6";
	$pdo=new PDO($dsn,$username,$passwd);//数据源:代表连接那种数据库,数据库是什么。数据库管理工具的账号+密码
	echo "自动提交".$pdo->getAttribute(PDO::ATTR_AUTOCOMMIT);//事务默认提交是否开启
	echo "<br />";
	echo "pdo默认处理错误模式".$pdo->getATTribute(PDO::ATTR_ERRMODE);
	echo "<br />";
	 "禁用自动提交".$pdo->setAttribute(PDO::ATTR_AUTOCOMMIT,0);
		echo "<br />";
	echo "自动提交".$pdo->getAttribute(PDO::ATTR_AUTOCOMMIT);//事务默认提交是否开启0
}	
catch(PDOException $e)
{
	echo $e->getMessage();//错误信息
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/258908.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

中国社科院与新加坡新跃社科联合培养工商管理博士

全球经济正在经历由科技进步与创新、政治和人口的剧烈变化所带来的巨大不确定性与挑战。企业的领导者和管理者需要发展出战略性思维和全球洞察力以便面对越来越大的经济波动。中国社科院与新加坡新跃社科联合培养工商管理博士项目的训练能够让学生在一个企业和组织的改变和发展…

Attention-Challenging Multiple Instance Learning for Whole Slide Image(ACMIL)

Attention-Challenging Multiple Instance Learning for Whole Slide Image&#xff08;ACMIL&#xff09; 问题&#xff1a; predictive instances 与 instances有什么区别&#xff1f; 0. Abstract 针对领域&#xff1a;MIL的过拟合 现有问题&#xff1a;当前的MIL方法只…

mt5和mt4交易软件有什么区别?

MetaTrader 4&#xff08;MT4&#xff09;和MetaTrader 5&#xff08;MT5&#xff09;是两种广泛使用的外汇和金融市场交易平台&#xff0c;由MetaQuotes公司开发。尽管它们都是外汇交易的常见选择&#xff0c;但在功能和特性上存在一些区别。以下是MT4和MT5之间的主要区别&…

高通平台开发系列讲解(USB篇)adb应用adbd分析

沉淀、分享、成长,让自己和他人都能有所收获!😄 在apps_proc/system/core/adb/adb_main.cpp文件中main()函数会调用adb_main()函数,然后调用uab_init函数 在uab_init()函数中,会创建一个线程,在线程中会调用init_functionfs()函数,利用ep0控制节点,创建ep1、ep2输…

Lombok-入门(效率开发)

文章目录 Lombok去Autowired注解valNonNull-空值校验Cleanup-自动关闭资源Getter/SetterToStringEqualsAndHashCode~Constructor-构造函数DataValue-不可变类Builder-使用建造者模式来创建对象Accessors(chain true)-开启链式编程Accessors(fluent true)-开启链式编程&#x…

工作流引擎的架构设计与对比

所谓工作流引擎是指 workflow 作为应用系统的一部分&#xff0c;并为之提供对各应用系统有决定作用的&#xff0c;根据角色、分工和条件的不同决定信息传递路由、内容等级 等核心解决方案。工作流引擎可以灵活地配置工作流程&#xff0c;并且可以自动化的根据配置进行状态变更和…

基于ssm生鲜配送系统设计及实现论文

摘 要 互联网发展至今&#xff0c;无论是其理论还是技术都已经成熟&#xff0c;而且它广泛参与在社会中的方方面面。它让信息都可以通过网络传播&#xff0c;搭配信息管理工具可以很好地为人们提供服务。针对生鲜配送信息管理混乱&#xff0c;出错率高&#xff0c;信息安全性差…

Floyd求最短路(Floyd算法)

参考&#xff1a;约会怎么走到目的地最近呢&#xff1f;一文讲清所有最短路算法问题-CSDN博客 有4个城市8条路&#xff0c;公路上的数字表示这条公路的长短&#xff0c;并且路是单向的&#xff0c;现在要求我们求出任意两个城市之间的最短路程&#xff0c;也就是求任意两个点之…

vscode颜色主题插件one dark Pro安装

1.点击扩展图标→搜索“one dark Pro”→第一个点击安装 2.安装成功后&#xff0c;不要忘了点击设置颜色主题 3.看下效果&#xff1a;

UCloud + 宝塔 + PHP = 个人网站

UCloud 宝塔 PHP 个人网站 文章目录 1.概要2.UCloud使用教程&#xff08;租用云端服务器&#xff09;3.宝塔使用教程&#xff08;免费服务器运维面板&#xff09;4.总结 1.概要 今天主要是想教大家如何将在网络上白嫖到源码&#xff08;特指PHP源码!!!&#xff09;搭建运行…

在mt4上怎么查看CHFJPY品种的合约细则?

在MetaTrader 4 (MT4) 上查看CHFJPY品种的合约细则的方法如下&#xff1a; FXCM福汇官方个人注册登录流程 1.打开MT4软件并登录到您的交易账户。 2.在MT4界面的"市场观察"窗格中&#xff0c;找到并右键单击"CHFJPY"货币对。如果您无法找到"市场观察…

AI毕业设计生成器(可生成java或python系统源码),使用Tensorflow训练的AI代码大模型

这是一个辅助生成计算机毕业设计的工具&#xff0c;可以自动完成毕业设计的源码。它基于几百个github上面开源的java和python项目&#xff0c;运用tengsorflow技术&#xff0c;训练出了AI大模型。基本实现了计算机毕业设计生成器&#xff0c;能够初步生成Java或python基本源码。…

CentOS7.9安装Mysql5.7-m14

简介 本文介绍了Linux CentOS系统下Mysql5.7-m14的下载和安装方法 环境 CentOS Linux release 7.9.2009 (Core) mysql Ver 14.14 Distrib 5.7.4-m14, for Linux (x86_64) using EditLine wrapper 正文 一、去官网下载mysql 5.7.4-m14 官网下载链接&#xff1a; https://d…

跟着野火学FreeRTOS:第一段(任务定义,切换以及临界段)

在裸机系统中&#xff0c;系统的主体就是 C P U CPU CPU按照预先设定的程序逻辑在 m a i n main main函数里面顺序执行的无限循环。在多任务系统中&#xff0c;根据功能的不同&#xff0c;把整个系统分割成一个个独立的&#xff0c;无限循环且不能返回的的函数&#xff0c;这个…

公众号商务合作投放怎么做,公众号商务合作流程!

微信公众号已经成为企业品牌推广、产品宣传的重要渠道。企业通过公众号进行商务合作投放广告&#xff0c;引爆产品流量&#xff0c;投放的公众号要有一定的粉丝基础&#xff0c;投放出去产生一定的投放效果。 本文伯乐网络传媒将为您详细介绍公众号商务合作投放的流程及注意事…

计算机硬件系统设计——运算器设计

计算机硬件系统设计——运算器设计 文章目录 计算机硬件系统设计——运算器设计8位可控加减法器2位加法器&#xff1a;3位加法器&#xff1a;串行进位加法器&#xff08;把n个全加器相连得到的n位加法器&#xff09; 4位先行进位电路74182并行进位加法器 4位快速加法器16位快速…

力扣日记12.19-【二叉树篇】二叉搜索树中的搜索

力扣日记&#xff1a;【二叉树篇】二叉搜索树中的搜索 日期&#xff1a;2023.12.19 参考&#xff1a;代码随想录、力扣 700. 二叉搜索树中的搜索 题目描述 难度&#xff1a;简单 给定二叉搜索树&#xff08;BST&#xff09;的根节点 root 和一个整数值 val。 你需要在 BST 中…

CloudPulse:一款针对AWS云环境的SSL证书搜索与分析引擎

关于CloudPulse CloudPulse是一款针对AWS云环境的SSL证书搜索与分析引擎&#xff0c;广大研究人员可以使用该工具简化并增强针对SSL证书数据的检索和分析过程。 在网络侦查阶段&#xff0c;我们往往需要收集与目标相关的信息&#xff0c;并为目标创建一个专用文档&#xff0c…

解决win10下强制设置web浏览器为microsoft edge的方法

目录 问题场景实现方法禁止edge默认选项设置默认浏览器 反思 问题场景 因为一些特殊的原因&#xff0c;我需要第二个浏览器&#xff0c;我的第一个浏览器是google的chrome浏览器&#xff0c;所以我选择的是windows的默认浏览器&#xff0c;就是microsoft edge浏览器&#xff0…

SpringBoot actuator应用监控

文章目录 引入依赖端点(Endpoints)端点种类端点开启配置暴露端点手动暴露端点 端点保护引入spring security依赖配置security 端点响应缓存访问端点路径修改CORS跨域支持健康信息(/actuator/health)自定义healthInfo 应用信息(/actuator/info) 监控信息可视化引入依赖配置查看配…