php pdo操作mysql_PHP操作数据库详细(PDO)

PHP 5.1 发布时将附带一个全新的数据库连接层,即 PHP Data Objects (PDO)。虽然 PHP 一直都拥有很好的数据库连接,但 PDO 让 PHP的数据库操作 达到一个新的高度。PDO可支持基本的MySQL、Microsoft SQL Server、Oracle等数据库,并且提供了统一的操作方法,高度集成了数据库操作。PDO的使用较好的解决项目开发过程中可能存在的数据库更换问题。

PDO对数据库的操作方法如增删改查,进行了统一整合,但对原始的数据库语句存在的差异,并不能完美的解决,比如MySQL的 limit 来查询第 m 行到第 n 行的记录使用 (select * from 表名 limit m, n),而Microsoft SQL Server则需要使用top命令的组合等。

此外,使用PDO的预处理函数prepare(),能很好的解决SQL注入问题。

支持的数据库集合:

1d5dcf2550d0df0e3298e151592e7999.png

打开/连接数据库:

1 <?php2 //error_reporting("E_ALL & ~ E_NOTICE");

3 echo '';//解决乱码问题

4 $conn=false;5 //地址

6 $db_server = 'localhost';7 //端口

8 $db_port = '3306';9 //数据库

10 $db_name = 'dbdong';11 //用户

12 $db_user = 'root';13 //密码

14 $db_password = 'root';15 //连接的dsn,每个数据库都存在差异

16 $dsn = "mysql:host=$db_server;port=$db_port;dbname=$db_name";17 try{18 //连接数据库 参数四(持久连接):array(PDO::ATTR_PERSISTENT => true)

19 $conn = new PDO($dsn, $db_user, $db_password);20 //设置字符集

21 $conn->query("set names utf8");22

23 echo "连接数据库成功";24

25 } catch (PDOException $ex) {26 exit("不能连接数据库".$ex);27 }

补充:

1 echo $conn->getAttribute(PDO::ATTR_SERVER_VERSION);//服务器数据库版本

2 echo $conn->getAttribute(PDO::ATTR_CLIENT_VERSION);//客户端数据库版本

设置数据库操作时错误模式:

1 /*

2 PDO::ATTR_ERRMODE:错误报告。3

4 1. PDO::ERRMODE_SILENT: 仅设置错误代码。5

6 2. PDO::ERRMODE_WARNING: 引发 E_WARNING(警告) 错误7

8 3. PDO::ERRMODE_EXCEPTION: 抛出 exceptions 异常。catch (PDOException $ex)捕获9

10 */

11 //获取到当前设置的错误模式

12 echo $conn->getAttribute(PDO::ATTR_ERRMODE);13 //设置为警告模式,如果出现数据库操作问题,会产生警告,推荐

14 $conn->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_WARNING);15 //任意测试

16 $conn->exec("delete from xxx");

数据库操作:

1、exec(“标准sql语句“) 用来处理非结果集的

//如insert、update、delete、create,返回为影响行数

2、query(“标准sql语句“,模式取值) 可用来处理所有语句

//返回结果集(select,desc),返回空(insert、updata……)

获取结果的模式:

e9c0cdff33a0db28a68e87db37811e68.png

1 //查询并全部输出小例子

2 $xx=$conn->query("select * from c",PDO::FETCH_ASSOC);3 //一行一行拿数据

4 while($rowx=$xx->fetch()){5 //输出

6 print_r($rowx);7 }

事物处理:

开始事物->提交事物

1 //设置错误模式为抛出异常

2 $conn->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);3 //开始事务

4 $conn->beginTransaction();5 try{6 $con=$conn->exec("update c set CN='222222'");7 $con=$conn->exec("update c sext PCNO='222222222222'");8 if($con<=0){9 //抛出异常

10 throw new PDOException("哇,我自己抛出异常");11 }12 //提交事务

13 $conn->commit();14

15 }catch(PDOException $ee){16 echo "-----------------------".$ee;17 //事务内部异常,操作全部撤销

18 $conn->rollBack();19 }

预处理:

更新实现列子

1 //设置错误模式为抛出异常

2 $conn->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);3

4 try{5 //预处理SQL语句6 //?号占位符,必须从1下标开始7 //CNO=:name1 ,绑定参数时bindParam(":name1",$valuex);,名字不可相同

8 $res=$conn->prepare("update c set CN='dongxiaodong1' where CNO=?");9

10 //执行第一次11 //绑定参数1,参数是引用,所以需要是变量12 //参数三,确定类型:PDO::PARAM_INT,PDO::PARAM_STR等

13 $valuex="C1";14 $res->bindParam(1,$valuex);15 //执行处理1

16 $res->execute();17 //若两次值相同,则影响行数为0

18 echo "影响的行数:".$res->rowCount();19

20 //执行第二次

21 $valuex="C3";22 $res->bindParam(1,$valuex);23 $res->execute();24

25 //执行第三次

26 $res->execute(array("C4"));27

28 }catch(PDOException $ee){29 echo "!!!!!!!!".$ee;30

31 }

查询实现列子

1 //设置错误模式为抛出异常

2 $conn->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);3

4 try{5

6 //预处理SQL语句7 //?号占位符,必须从1下标开始8 //CNO=:name1 ,绑定参数时bindParam(":name1",$valuex);,名字不可相同

9 $res=$conn->prepare("select *from c where CN=:nam");10

11 //设置全局fetch获取数据模式,模式参考上表,范围$res以下12 //$res->setFetchMode(PDO::FETCH_NUM);

13

14 $res->execute(array("nam"=>"dongxiaodong"));15

16 echo "查询到的总行数为:".$res->rowCount();17

18 //获取单行:fetch(参数1),参数1可以更改返回模式,参考上面的模式表格19 //获取全部:fetchall(参数1)

20 print_r($res->fetchall(PDO::FETCH_NUM));21

22 }catch(PDOException $ee){23 echo "!!!!!!!!!".$ee;24

25 }

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HTTP POST请求报文格式分析与Java实现文件上传

时间 2014-12-11 12:41:43 CSDN博客原文 http://blog.csdn.net/bboyfeiyu/article/details/41863951主题 HTTP HttpComponents在开发中&#xff0c;我们使用的比较多的HTTP请求方式基本上就是GET、POST。其中GET用于从服务器获取数据&#xff0c;POST主要用于向服务器提交一些…

网络层:IP协议详解(IP协议真的得看这篇)

1、IP协议概念 IP&#xff08;Internet Protocol , 互联网协议&#xff09;主要用于互联网通信。IP协议用于将多个包交换网络连接起来&#xff0c;他在原地址和目的地址之间传输数据报&#xff0c;还提供对数据大小的重新组装功能&#xff0c;以适应不同网络的要求。 IP协议是…

传输层两大协议:TCP与UDP详解(两者的联系与区别)

一、TCP协议 1、TCP协议报文格式 TCP协议报文格式详解 2、TCP“三次握手”建立连接 位码即tcp标志位,有6种标示: SYN(synchronous建立联机) ACK(acknowledgement 确认) PSH(push传送) FIN(finish结束) RST(reset重置) URG(urgent紧急) Sequence number(顺序号码) Ac…

docker二进制安装mysql_Docker搭建MySQL读写分离主从模式 分布式数据库中间件Mycat分库分表应用...

一、MySQL读写分离主从模式1. 下载镜像docker pull mysql当前最新版本&#xff1a;mysql Ver 8.0.19 for Linux on x86_64 (MySQL Community Server - GPL)2. 启动主节点并修改配置文件docker run -it --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD123456 mysql bash修改/…

五种I/O模型详解

1. 概念理解 在进行网络编程时&#xff0c;我们常常见到同步(Sync)/异步(Async)&#xff0c;阻塞(Block)/非阻塞(Unblock)四种调用方式&#xff1a; 同步&#xff1a; 所谓同步&#xff0c;就是在发出一个功能调用时&#xff0c;在没有得到结果之前&#xff0c;该调用就不…

存储过程 while is null_4.2 串的存储实现(2)

返回目录&#xff1a;Chilan Yu&#xff1a;《数据结构》目录链接​zhuanlan.zhihu.com4.2.2 堆串字符串包括串名与串值两部分&#xff0c;而串值采用堆串存储方式存储&#xff0c;串名用符号表存储。堆串存储方式&#xff1a;这种存储方法以一组地址连续的存储单元存放串的字符…

高光谱图像pca降维_高光谱图像的数据特性之探讨

图像是获取信息以及探知世界的重要媒介。近年来&#xff0c;传感科技与成像技术实现了跨越式发展&#xff0c;促使图像获取在质与量上均获得了显著提升。在多样化成像手段中&#xff0c;光谱成像技术是成像科技的重要组成部分&#xff0c;是人类借助光这一能量手段探测物质特性…

注册Tomcat服务为系统服务

2019独角兽企业重金招聘Python工程师标准>>> 将解压版的Tomcat服务注册为系统服务之后&#xff0c;就不用每次启动机器之后都要手动去启动"startup.bat"&#xff0c;就方便多了&#xff0c;下面就是具体步骤&#xff08;以我的机器为例&#xff0c;我的To…

【Spring学习笔记-MVC-17】Spring MVC之拦截器

作者&#xff1a;ssslinppp 1. 拦截器简介及应用场景2. 拦截器接口及拦截器适配器3. 运行流程图正常运行中断流程4. 程序实例控制层&#xff1a;ControllerRequestMapping(value "/test")public class TestController {RequestMapping(value "/intercept…

iOS之地理位置及定位系统 -- 入门笔记(用Swift)

前言&#xff1a;关于地理位置及定位系统&#xff0c;在iOS开发中也比较常见&#xff0c;比如美团外面的餐饮店铺的搜索&#xff0c;它首先需要用户当前手机的位置&#xff0c;然后在这个位置附近搜索相关的餐饮店铺的位置&#xff0c;并提供相关的餐饮信息&#xff0c;再比如最…

PHP监測memcache服务端的执行状况

. 代码例如以下&#xff0c;代码为memcache官方代码&#xff0c;引用在此。做一下简单的说明&#xff1a; 1、设置username和password define(ADMIN_USERNAME,admin); // Admin Username define(ADMIN_PASSWORD,123456); // Admin Password 2、配置server及其port&#xff0…

linux grep 匹配空格_17 个案例,5 分钟简单搞定 Linux 正则表达式!

正则表达式是一种字符模式&#xff0c;用于在查找过程中匹配制定的字符。元字符通常在Linux中分为两类&#xff1a;Shell元字符&#xff0c;由Linux Shell进行解析&#xff1b;正则表达式元字符&#xff0c;由vi/grep/sed/awk等文本处理工具进行解析&#xff1b;正则表达式一般…

micropython web ws2812_MicroPython实例之TPYBoard v102炫彩跑马灯WS2812B

一、实验目的了解ws2812b的工作原理学习ws2812b的驱动方法二、实验器材TPYBoard v102 1块ws2812b RGB-Ring-8 1个micro USB数据线 1条杜邦线 若干三、WS2812B的介绍WS2812B是一个集控制电路与发光电路于一体的智能外控LED光源。 其外型与一个5050LED灯珠相同&#xff0c; 每个元…

mysql数据库表复用_MySQL 数据库之表操作

一、创建表的完整语法create table 表(字段名1 类型 [(宽度) 约束条件]&#xff0c;字段名2 类型 [(宽度) 约束条件]&#xff0c;字段名3 类型 [(宽度) 约束条件])&#xff1b;1.类型&#xff1a;使用限制字段必须以什么样的数据类型传值约束条件&#xff1a;约束条件是在类型之…

Android有道词典查询功能

有道词典 任务要求&#xff1a;完成查词等功能 因为需要申请API key&#xff0c;这里直接给出地址供使用&#xff1a;http://fanyi.youdao.com/openapi?pathdata-mode 1、activity_main.xml基本格局&#xff08;不做任何说明&#xff09; 代码如下&#xff1a; 1 <Relative…

从零开始学Axure原型设计(高级篇)

如果你熟悉了Axure的部件库&#xff0c;那么你可以得心应手地画出心目中产品的线框图&#xff1b;如果你会用Axure的母版、动态面板功能&#xff0c;那么你应该能够画出一些简单网站的原型图&#xff1b;但只有你精通了Axure的条件逻辑、变量、函数等高级交互&#xff0c;才能将…

python vector 初始化_从零开始搭建机器学习算法框架(python)--计算框架

介绍今天开始一个新的系列&#xff0c;这个系列的目标是用python在不使用任何第三方库的情况下去实现各类机器学习或者深度学习的算法。之所以会有这种想法是因为每当我想提高编程技巧的时候&#xff0c;我总希望能够做一些简单又有趣的小项目练手。我一直对机器学习算法颇感兴…

windows phone 页面主题设计

达到如图这个效果&#xff1a; 1.保证状态栏背景色与主题栏颜色相同需设置状态栏的透明度&#xff0c;代码如下&#xff1a;shell:SystemTray.IsVisible"True" shell:SystemTray.Opacity"0.01" 2.顶部状态栏高度为25&#xff0c;字的上下要留部分空白3.内容…

JAVA如何才能导出这样的EXCEL?

2019独角兽企业重金招聘Python工程师标准>>> 最近的项目有个需求&#xff0c;需要做个报表&#xff0c;excel如上所示。没有很好的办法&#xff0c;求指教。 转载于:https://my.oschina.net/secret620/blog/611450

Xcode 修改工程名以及注意事项

1、先把整个工程文件夹名改为新的工程名。 2、打开工程&#xff0c;单击&#xff0c;输入新的工程名,会出现&#xff0c;点击确定。 3、回到工程界面&#xff0c;在中选择 Manage Schemes,然后再弹出的对话框&#xff0c;把工程名改为新的名字。 4、最好在工程中&#xff0c;把…