搜索
查看
编辑修改
首页
UNITY
NODEJS
PYTHON
AI
GIT
PHP
GO
CEF3
JAVA
HTML
CSS
搜索
小舞很执着
这个屌丝很懒,什么也没留下!
关注作者
热门标签
jquery
HTML
CSS
PHP
ASP
PYTHON
GO
AI
C
C++
C#
PHOTOSHOP
UNITY
iOS
android
vue
xml
爬虫
SEO
LINUX
WINDOWS
JAVA
MFC
CEF3
CAD
NODEJS
GIT
Pyppeteer
article
热门文章
1
Hive on Spark调优(大数据技术6)_hive on spark 优化
2
SpringCloud之微服务网关的入门与进阶(请求过滤、网关限流)_springcloud中网关如何多用户发起请求怎么排除一些有问题的请求
3
SQL语言基础_mysql 学生成绩查询函数
4
大数据期末考试题库_大数据开发试卷
5
【windows|009】计算机网络基础知识_windows网络基础知识
6
自然语言处理中的文本生成:创造自然流畅的文本
7
【Docker】初学者 Docker 基础操作指南:从拉取镜像到运行、停止、删除容器_docker停止一个镜像的拉取
8
Python | 基于支持向量机(SVM)的图像分类案例_svm图像分类
9
Python数据爬取超详细讲解(零基础入门,老年人都看的懂)_python爬取数据
10
win10使用vs2019从源码编译OpenCV4.5+cuda10.2+cudnn8.0的C++环境和Python环境_vs2019中代码如何调用gpu加速
当前位置:
article
> 正文
PHP中PDO扩展库总结_pdo php extension
作者:小舞很执着 | 2024-07-21 01:49:23
赞
踩
pdo php extension
一.PDO作用
1.PDO(php data object)扩展类库为php访问数据库定义了轻量级的,一致性的接口
2.PDO提供了一个数据库访问抽象层,无论你使用了什么样的数据库,都可以通过一致的
函数执行查询和获取数据,大大简化了数据库的操作,并能够屏蔽不同数据库之间的差异
使用pdo可以方便的进行跨数据库程序的开发,以及不同数据库之间的移植
二.开启PDO扩展
1.使用PDO,需要加载pdo扩展库,请确定php.ini开始数据库扩展
extension_dir = "F:/wamp/php-5.4.45/ext"
extension=php_pdo.dll
extension=php_pdo_mysql.dll
2.重启apache服务
3.使用
extension_loaded()
函数可以检测Mysqli库扩展是否开启
三.使用PDO操作数据库
在PHP脚本中使用PDO操作数据库的步骤:
链接数据库服务器并选择数据库
设置使用异常的错误模式
设置字符集
准备并执行sql语句
处理结果集
四.链接Mysql,并选择数据库
new PDO('DSN','用户名','密码');
DSN(Data Source Name)数据源名称包含了请求链接到数据库信息
通常,一个DSN由PDO驱动名,紧随其后跟着冒号,以及具体的PDO驱动的链接语法组成:
mysql:host=127.0.0.1;port=3306;dbname=链接的数据库名
PDOException 异常类 代表一个由PDO产生的错误
getMessage() 获取错误信息
例:
try {
$pdo=new PDO("mysql:host=127.0.0.1;port=3306;dbname=eshop","root","123456");
} catch (PDOException $e) {
echo '数据库连接错误: ' . $e->getMessage();
}
五.设置使用异常的错误模式
PDO::getAttribute() 取回一个数据库链接的属性
PDO::setAttribute() 设置属性
PDO::ATTR_ERRMODE:错误模式
PDO::ERRMODE_SILENT: 仅设置错误代码,不提示
PDO::ERRMODE_WARNING: 引发 E_WARNING 错误
PDO::ERRMODE_EXCEPTION: 抛出 exceptions 异常
PDO::exec()
执行SQL为
insert update dalete
等操作语句 正确将返回受影响的行数,错误将
返回false
PDO::query()
执行SQL为
select、show
等查询语句,正确执行将返回资源结果集对象,错误执行
将返回false
六.处理资源结果集
setFetchMode(PDO::FETCH_NUM|PDO::FETCH_ASSOC|PDO::FETCH_BOTH) 设置结果集中数组的格式
FETCH_NUM 索引数组
FETCH_ASSOC 关联数组
FETCH_BOTH 关联|索引 数组
fetch()
从结果集中抽取一行作为数组返回 没有则返回false
fetchAll()
从结果集中抽取所有记录
七.处理非查询语句
lastinsertid()
在插入纪录时,返回最后插入记录的主键ID
八.pdo预处理
预处理好处:仅需解析一次,但可以用相同或不同的参数执行多次
可以确保不会发生SQL注入,提高安全性
1.先new出来一个数据库对象
例:$pdo=new PDO("mysql:host=127.0.0.1;port=3306;dbname=yhshop",'root','123456');
2.设置汉字编码
$pdo->exec("set names utf8"
);
3.准备要执行SQL语句
PDO::prepare() 准备一个SQL语句并返回一个语句对象
例:$staement=$pdo->prepare(insert into test(name,pwd,mobile) values(?,?,?));
别名形式(适合参数多)
例:$staement=$pdo->prepare(insert into test(name,pwd,mobile) values(:name,:pwd,:mobile));
4.绑定参数
bindParam(占位名[?的话就是用1,2,3|:name,:pwd的话就是':name','pwd'],要赋值的变量名,变量数据类型) 绑定一个参数到指定的变量名
变量数据类型:
PDO::PARAM_STR 字符串型
PDO::PARAM_INT 整型
PDO::PARAM_BOOL 布尔类型
POD::PARAM_NULL null数据类型
POD::PARAM_LOB 大对象数据类型
PDO赋值 数据类型不会强制转换
Mysqli赋值 数据类型会强制转换
例:
$staement->bindParam(1,$username,PDO::PARAM_STR);
$staement->bindParam(2,$password,PDO::PARAM_STR);
5.数据赋值
例:
$username='小六';
$password=md5(123456);
6.执行SQL语句
execute()
执行一条预处理语句 可以在函数里直接赋值 写成数组
rowCount()
返回受上一条SQL语句影响的行数 没有参数
别名形式
绑定参数
$statement->bindParam(':username',$username,PDO::PARAM_STR);
$statement->bindParam(':password',$password,PDO::PARAM_STR);
数据赋值
$username='yh002';
$password=md5('123');
执行SQL
$statement->execute(array('username'=>$username,'pwd'=>$password));
也可以不绑定参数在执行SQL时直接赋值
$statement->execute(array('pwd'=>md5('123'),'username'=>'yh002'));
九.pdo事物处理
事物:将多条sql操作(增删改)作为一个操作单元,要么成功要么失败
被操作的表必须是innoDB类型
设置表类型:alter table yh_admin engine=innodb;
关闭事物处理
set autocommit=0;
setAttribute()
设置一个语句属性,当前没有通用的属性可以设置,只有驱动属性:
PDO::ATTR_AUTOCOMMIT
如果此值为false PDO将试图禁用自动提交以便数据库连接一个事物
开启事物
start transaction;
beginTransaction()
启动一个事物 没有参数
提交事物
commit;
commit()
提交一个事物 没有参数
回滚事物
rollback;
rollback()
回滚一个事物 没有参数
异常处理
例:throw new PDOException('事务处理失败,请重新尝试');
throw 是明确的抛出异常
catch 是用来处理异常错误
十.大数据对象的处理
保存
$dbh= new PDO('mysql:dbname=testdb;host=localhost', 'root', '123456');
$stmt = $db->prepare("INSERT INTO images(mimetype,data) VALUES (?, ?)");
//使用fopen()函数打开上传的文件
$fp = fopen($_FILES['file']['tmp_name'], 'rb');
//将上传文件的MIME类型绑定到第一个参数中
$stmt->bindParam(1, $_FILES['file']['type']);
//将上传文件的二进制数据和第二个参数绑定
$stmt->bindParam(2, $fp, PDO_PARAM_LOB);
$stmt->execute();
bindParam() 绑定一个参数到指定变量名
bindColumn() 绑定一列到一个 PHP 变量
读取
$db = new PDO('mysql:dbname=testdb;host=localhost', 'root', '123456');
$stmt = $db->prepare("SELECT mimetype,data FROM images WHERE id=?");
//通过表单中输入的ID值和参数绑定,并执行查询
$stmt->execute(array($_GET['id']));
//获取结果集中的大数据类型和文件数据
list($type, $data) = $stmt->fetch();
header("Content-Type: $type");
//将从表中读取的大文件类型作为合适的报头发送
echo $data;
声明:
本文内容由网友自发贡献,转载请注明出处:
【wpsshop】
推荐阅读
article
单链
表简单
学生
信息管理系统
(纯C语言实现)_
数据结构
c
单链
表学分管理...
大一,刚开始学
数据结构
,用
c
语言浅浅写了一个简单的
学生
信息管理系统
_
数据结构
c
单链
表学分管理
数据结构
c
单链
表学分管理 ...
赞
踩
article
全面的
ASP
.
NET
Core
Blazor
简介和快速
入门
_
blazor
教程
...
因为咱们的MongoDB
入门
到实战
教程
Web端准备使用
Blazor
来作为前端展示UI,本篇文章主要是介绍
Blazor
是一...
赞
踩
article
适用于
Java
开发人员
的微
服务
:
持续
集成
和
持续
交付
...
1.简介 如果我们回顾与微
服务
体系结构相关的众多挑战,确保每个微
服务
都能够与每个对等方说正确的语言可能是最困难的挑战之一...
赞
踩
article
ubuntu
完全卸载
Docker
_
ubuntu
删除
docker
...
ubuntu
完全干净的卸载
docker
删除
某软件,及其安装时自动安装的所有包sudo apt-get autoremo...
赞
踩
article
2024
年的今天
为什么
工作
很难找?
实习
生都找不到
工作
_
2024
找
实习
难...
作为一名博主,我深感担忧:
为什么
2024
年,连
实习
生都很难找到
工作
?本文将探讨当前全球性的就业难题,分析其原因,并提供可...
赞
踩
article
【
Python
】解决
AttributeError
: ‘NoneType‘
object
has
no
...
是一个常见的
Python
错误,它通常表示你正在尝试在一个值为None的对象上调用属性或方法。要解决这个问题,你需要仔细检...
赞
踩
article
清理
Docker
容器
占用
的
磁盘空间
_
容器
磁盘空间
满了
后
,
容器
会重启吗...
Docker
容器
长时间运行,日志文件会
占用
较大
磁盘空间
,手动清理日志文件,防止服务器
磁盘空间
耗尽
_
容器
磁盘空间
满了
后
,
容...
赞
踩
article
基于
51
单片机
的
数字
时钟
(
万年历
)_
51
单片机
万年历
...
具体实现功能系统由STC89C52
单片机
+DS1302
时钟
芯片+按键模块+LCD1602显示+电源构成。具体功能:1、可...
赞
踩
article
LUA
编程语言
教程...
由于wr是弱引用,因此它并不会增加t的引用计数,所以当我们手动将t设置为nil时,t被回收掉了。在
LUA
语言中,每个值都...
赞
踩
article
Stable
Diffusion【提示词】【
人物肖像
】:多角度
人物肖像
_
stable
diffusi...
Stable
Diffusion【提示词】【
人物肖像
】:多角度
人物肖像
_
stable
diffusion
老人肖像的pr...
赞
踩
article
OPENWRT
路由
配置IPV6公网
访问
_
ipv6
访问
路由
器...
配置
OPENWRT
公网
访问
_
ipv6
访问
路由
器
ipv6
访问
路由
器 前提:已经拥有
ipv6
...
赞
踩
article
深度
优先
搜索
(
DFS
)
,
看这一篇就够了。...
一
,
定义:
深度
优先
搜索
的思路和树的先序遍历很像
,
下面是百度百科上的定义:
深度
优先
遍历图的方法是
,
从图中某顶点v出发:(1...
赞
踩
article
ElasticSearch
全文
搜索
引擎
_全文
搜索
es...
Lucene是apache下的一个开源的全文检索引擎工具包(一堆jar包)。它为软件开发人员提供一个简单易用的工具包(类...
赞
踩
article
VTK
----
3D
picking
的
原理、类型及实现...
3D
picking
是一种在三维场景中确定用户点击或指向
的
对象
的
技术。这在
3D
应用程序和游戏中非常常见,允许用户通过点...
赞
踩
article
【在
FastAPI
应用
中嵌入
Gradio
界面
的实现方法】如何在有
一个
Fastapi
应用
的基础上,新加...
通过将
Gradio
界面
嵌入到
FastAPI
应用
中,我们可以轻松地实现
一个
交互式的Web
应用
程序,为用户提供友好的
界面
来与...
赞
踩
article
从零开始
开发
IM
(
即时通讯
)
服务端
附源码_
im
开发
...
首先讲讲
IM
(
即时通讯
)技术可以用来做什么:聊天:qq、微信直播:斗鱼直播、抖音实时位置共享、游戏多人互动等等可以说几乎...
赞
踩
article
7款
读
文献
的
AI
神器,可总结
分析
文件
、
读
论文必备!_
ai
读
文献
...
7款
读
文献
的
AI
神器,可总结
分析
文件
、
读
论文必备!_
ai
读
文献
ai
读
文献
1、包阅 一款...
赞
踩
article
Lua5.3遇到的坑_
attempt
to
call
a nil
value
(
global
'un...
Lua5.3遇到的坑https://blog.csdn.net/cyn618/article/details/69935...
赞
踩
article
C
语言
数据结构
二:单向
链表
_
c
语言
linklist
后面
是什么...
单向
链表
_
c
语言
linklist
后面
是什么
c
语言
linklist
后面
是什么 单项
链表
由两...
赞
踩
article
BERT
预
训练
学习(
数据
:样本构建、输入格式;算法:
transformer
、
mlm
和nsp任务)
_
...
任务:MLM完形填空、下一句预测
数据
:构建样本
数据
及label,输入格式参考:**https://github.com/...
赞
踩
相关标签
算法
数据结构
c++
c语言
asp.net
后端
c#
.net
.netcore
编程语言
python
人工智能
java
大数据
docker
linux
ubuntu
就业
开发语言
pandas
机器学习
numpy
运维
容器
51单片机