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协议是…

mysql my.cnf_如何知道mysql的my.cnf位置

你实际上可以让MySQL显示搜索my.cnf(或Windows上的my.ini)的所有位置的列表。 它不是一个SQL命令。 是终端命令&#xff0c;执行&#xff1a;$ mysqld –help –verbose在第一行&#xff0c;你会发现一个消息&#xff0c;列出所有my.cnf位置。 在我的机器上是&#xff1a;Defau…

传输层两大协议: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…

2016-01-17

1.《将来的你&#xff0c;一定会感谢现在拼命地自己》 感觉是一本总结的书&#xff0c;有方向、胸怀、习惯、幸运、内心、浮躁等等&#xff0c;现在有时候还拿出来温故一番。可以拥有。 2.《华为研发》 一本介绍华为的发展史&#xff0c;包括华为的一些故事&#xff0c;最令人印…

方法调方法(委托方式)

具有功能的实现方法&#xff0c;这个方法是一个吧数据插入到数据库然后再插入到listview的方法&#xff0c;使用for循环不断的调用这个方法进行插入&#xff1a; /// <summary>/// 获得Excel的名称和代号/// </summary>private void GetData(string name, string p…

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修改/…

C++11标准库 - array

std::array是原生数组的封装&#xff0c;它存放于栈上且大小固定&#xff0c;性能也与之相同。在原生数组的基础上&#xff0c;它添加了范围检查&#xff0c;以及其它的STL的相应特性&#xff0c;比如复制、交换、迭代器、查询大小。 按照C11的规范&#xff0c;应该抛弃原生数组…

设计模式之单例模式(C++代码实现)

1、单例模式&#xff1a; 单例模式&#xff1a;用来创建独一无二的&#xff0c;只能够有一个实例的对象。 单例模式的结构是设计模式中最简单的&#xff0c;但是想要完全实现一个线程安全的单例模式还是有很多陷阱的。 2、应用场景&#xff1a; 共享数据或者共享访问点&…

在Controller中使用AOP

转&#xff1a;http://usherlight.iteye.com/blog/1306111 在Controller中使用AOP的问题主要在于如何让Controller能够被检测到。 Controller和其他Spring bean的区别在于:Controller是由mvc定义并在web.xml中的dispatcher中定义的。 解决方法&#xff1a; 1、正确定义Controll…

mysql 6.17_2020 6/17 mysql数据的增删改查

一、增删改数据1、增加数据&#xff1a;-- 插入所有字段。一定依次按顺序插入INSERT INTO student VALUES(1,张三,男,20);-- 插入部分字段INSERT INTO student(id,NAME) VALUES(2,李四);2、修改数据&#xff1a;-- 带条件的修改(推荐使用)UPDATE student SET gender男 WHERE id…

五种I/O模型详解

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

回答自己的提问

第一章&#xff1a;概论 问题&#xff1a;看完这章后&#xff0c;了解了一些程序员都知道的名言、推论等&#xff1b;像"程序数据结构算法”、"软件程序软件工程"这些。在1.2.3这节内容上知道软件工程与计算机科学是息息相关的&#xff0c;那么在那么多的计算机…

Tomcat自定义部署

首先&#xff0c;需要把apachetomcat安装目录里面的 bin/ conf/ logs/ webapps/ work/ 都拷贝到自定义WEB应用目录下&#xff0c;比如 /home/app/test.aliyun.com/&#xff0c;这个目录以后就是部署该项目的操作目录&#xff0c;下面用yourdomain来代替。 文件夹部署方式&#…

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

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

iOS UIWebView URL拦截

http://www.cocoachina.com/ios/20150626/12161.html 本文译者&#xff1a;candeladiao&#xff0c;原文&#xff1a;URL filtering for UIWebView on the iPhone说明&#xff1a;译者在做app开发时&#xff0c;因为页面的javascript文件比较大导致加载速度很慢&#xff0c;所以…

nginx的upstream目前支持5种方式的分配

nginx的upstream目前支持5种方式的分配1、轮询&#xff08;默认&#xff09;每个请求按时间顺序逐一分配到不同的后端服务器&#xff0c;如果后端服务器down掉&#xff0c;能自动剔除。2、weight指定轮询几率&#xff0c;weight和访问比率成正比&#xff0c;用于后端服务器性能…

1216: 斐波那契数列

From: 合工宣OJ http://xcacm.hfut.edu.cn/problem.php?id1216 时间限制: 1 Sec 内存限制: 128 MB 题目描述 Fibonacci数列&#xff0c;定义如下&#xff1a; f(1)f(2)1 f(n)f(n-1)f(n-2) n>3 计算第n项Fibonacci数值。 输入 输入第一行为一个整数n&#xff08;1<…

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

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

RequestMapping

转自&#xff1a;http://blog.csdn.net/kobejayandy/article/details/12690041 简介&#xff1a;RequestMappingRequestMapping是一个用来处理请求地址映射的注解&#xff0c;可用于类或方法上。用于类上&#xff0c;表示类中的所有响应请求的方法都是以该地址作为父路径。Requ…