11月7日下午PHP----PDO访问方式操作数据库
MySQLI是专门访问MySQL数据库的,不能访问其它数据库。PDO可以访问多种的数据库,它把操作类合并在一起,做成一个数据访问抽象层,这个抽象层就是PDO,根据类操作对应的数据库。mysqli是一个类,PDO也是一个类,只不过PDO这个类功能更加强大。
PDO的功能
1.访问不同的数据库
2.自带事务功能。事务是指同时执行几条sql语句,但是其中1条语句出了错无法执行,那么所有的就都执行失败。
3.防止SQL注入攻击。
1.访问不同数据库
下面代码是访问MySQL数据库的,如果访问其它数据库,只需要在造对象中更改数据库驱动mysql,换成其它数据库的驱动。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档</title>
</head> <body>
<?php
//PDO的用法
//1.造对象
$dsn = "mysql:dbname=text1;host=localhost";
//mysql是指MySQL数据库的驱动名,加上冒号,冒号后面是数据库的名称。
//host是服务器的地址,为localhost。
//如果要使用其它数据库,要更改数据库的驱动名。可以从php手册里面找。
//写的驱动一定是配好环境的驱动。可以在浏览器地址栏里输入服务器地址localhost查找支持的数据库驱动。
$pdo = new PDO($dsn,"root","666");
//参数:1.服务器的地址2.数据库的名称3.服务器密码 //写sql语句
$sql = "update nation set name='兽族' where code='n003'"; //执行sql语句
//$r = $pdo->exec($sql);//返回受影响的条数
?>
</body>
</html>
2.事务功能
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档</title>
</head> <body>
<?php
//1.造对象
$dsn = "mysql:dbname=text1;host=localhost";
$pdo = new PDO($dsn,"root","666"); //设置异常模式,如果吹啊你错误,抛个异常出来。2个参数不要加双引号。
$pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION); //写sql语句
$sql1 = "insert into nation values('noo5','人族')";
$sql2 = "insert into nation values('noo6','精灵族')"; //执行2条sql语句
try//try代表加事务
{
$pdo->beginTransaction();//启动事务 $pdo->exec($sql1);
$pdo->exec($sql2); $pdo->commit();//提交事务
}
catch(PDOException $e)//抓住出现的异常。$e代表抓住的异常,异常保存在$e里面。
{
//$e->getMessage();//获取错误信息。
$pdo->rollBack();//回滚,如果一个地方出现错误,回到总体操作之前。
} ?>
</body>
</html>
3.防止注入
(1)占位方式为?
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档</title>
</head> <body>
<?php
//防止sql注入 //1.造对象
$dsn = "mysql:dbname=text1;host=localhost";
$pdo = new PDO($dsn,"root","666"); //写sql语句,预处理语句。
$sql = "insert into nation values(?,?)";//变量先不写,先用?占住位置。先把这条语句发过去。 //准备sql语句,返回statement对象。
$st = $pdo->prepare($sql); /*//绑定参数
$st->bindParam(1,$code);//从1开始索引。
$st->bindParam(2,$name); $code="n002";//也可以在前面赋值。
$name="矮人族"; //提交执行
$st->execute();//调用这个方法就可以执行了,括号里面不用给sql语句了,sql语句已经传过去了。
*/ $attr = array("n007","魔族");//造一个数组,数组里面要和添加的内容对应起来。这2行相当于上面/**/标记的4行内容。 //提交执行
$st->execute($attr);//直接把数组放在执行的里面。 //预处理里面用?占位的,给数组的时候要给索引数组,并且数组里的内容要和要添加的内容对应起来。 ?>
</body>
</html>
(2)占位方式为name
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档</title>
</head> <body>
<?php
//防止sql注入 //1.造对象
$dsn = "mysql:dbname=text1;host=localhost";
$pdo = new PDO($dsn,"root","666"); //写sql语句,预处理语句。使用name占位。
$sql = "insert into nation values(:code,:name)";//前面要加冒号,不加冒号会被当成普通的变量 //准备执行
$st = $pdo->prepare($sql); /*//绑定参数
$st->bindParam(":code",$code,PDO::PARAM_STR);//PDO::PARAM_STR表示必须是一个字符串
$st->bindParam(":name",$name,PDO::PARAM_STR); $code="no12";
$name="狼族"; //执行
$st->execute();*/ $attr = array("code"=>"n025","name"=>"虫族");//name占位,要用关联数组。 //执行
$st->execute($attr); ?>
</body>
</html>
4.读取数据
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档</title>
</head> <body>
<?php
//1.造对象
$dsn = "mysql:dbname=text1;host=localhost";
$pdo = new PDO($dsn,"root","666"); //写sql语句,预处理语句。使用name占位。
$sql = "select * from nation";//前面要加冒号,不加冒号会被当成普通的变量 //准备执行
$st = $pdo->prepare($sql); //执行
$st->execute(); //读数据
//var_dump($st->fetch());//输出结果为第一条,可以用while循环全部读取出来。
//var_dump($st->fetch(PDO::FETCH_ASSOC));//输出的是关联数组
//var_dump($st->fetch());//输出二维数组
//var_dump($st->fetch(PDO::FETCH_ASSOC));//输出关联的二维数组
?>
</body>
</html>
11月7日下午PHP----PDO访问方式操作数据库的更多相关文章
- PDO访问方式操作数据库
mysqli是专门访问MySQL数据库的,不能访问其它数据库.PDO可以访问多种的数据库,它把操作类合并在一起,做成一个数据访问抽象层,这个抽象层就是PDO,根据类操作对应的数据库.mysqli是一个 ...
- 11月15日下午 ajax返回数据类型为XML数据的处理
ajax返回数据类型为XML数据的处理 /*XML:可扩展标记语言 HTML:超文本标记语言 标签:<标签名></标签名> 特点: 1.必须要有一个根 2.标签名自定义 3.对 ...
- 11月10日下午 ajax做显示信息以后用ajax、Bootstrp做弹窗显示信息详情
1.用ajax做弹窗显示信息详情 nation.php <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN&qu ...
- 11月8日下午Jquery取属性值(复选框、下拉列表、单选按钮)、做全选按钮、JSON存储、去空格
1.jquery取复选框的值 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "htt ...
- 11月6日下午PHP注册审核(审核状态控制登录、可以更改审核状态)
1.创建登录界面 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://ww ...
- 11月6日下午PHP分页查询(查询结果也显示为分页)
1.先把数据库里所有的数据分页显示在页面,并在显示数据的表格上方加上查询表单. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transit ...
- 11月23日《奥威Power-BI报表集成到其他系统》腾讯课堂开课啦
听说明天全国各地区都要冷到爆了,要是天气冷到可以放假就好了.想象一下大冷天的一定要在被窝里度过才对嘛,索性明天晚上来个相约吧,相约在被窝里看奥威Power-BI公开课如何? 上周奥威公开 ...
- struts2练习时犯的错误(2016年11月4日)
1.Tomcat启动时报错 严重: 文档无效: 找不到语法. at (null:3:8) org.xml.sax.SAXParseException; systemId: file:/F:/Progr ...
- tmux使用——2019年11月20日16:40:15
1.tmux 命令行的典型使用方式是,打开一个终端窗口(terminal window,以下简称"窗口"),在里面输入命令.用户与计算机的这种临时的交互,称为一次"会话& ...
随机推荐
- MongoDB学习笔记~大叔框架实体更新支持N层嵌套~递归递归我爱你!
回到目录 递归递归我爱你!只要你想做,就一定能成功! 从一到二,从二到三,它是容易的,也是没什么可搞的,或者说,它是一种流水线的方式,而从三到十,从十到百,它注定要有一个质的突破,否则,它会把你累死, ...
- [原创]纯CSS3打造的3D翻页翻转特效
刚接触CSS3动画,心血来潮实现了一个心目中自己设计的翻页效果的3D动画,页面纯CSS3,目前只能在Chrome中玩,理论上可以支持Safari. 1. 新建HTML,代码如下(数据和翻页后的数据都是 ...
- Java goto,continue,break,标签
goto:在Java中goto仍是保留字,但并未在语言中使用它:Java没有goto. 保留字的定义: 保留字(reserved word),指在高级语言中已经定义过的字,使用者不能再将这 ...
- MSSQL复制中的发布与订阅
准备条件 1.2台服务器 2.WINDOWS SERVER 2008 64bit + 3.SQL SERVER 2008 R2 + 4.MSSQLSERVER服务与MSSQLAGENT服务正常运行中 ...
- 关于安装ruby brew 提示失败
Error running 'requirements_osx_brew_update_system ruby-1.9.3-p551', showing last 15 lines of /Users ...
- 自定义UICollectionLayout布局 —— UIKit之学习UICollectionView记录一《瀑布流》
一.思路 思路一:比较每一行所有列的cell的高度,从上到下(也就是从第一行开始),从最短的开始计算,(记录下b的高度和索引,从开始计算,依次类推) 思路二:设置上.下.左.右间距和行间距.列间距及列 ...
- 提高Axure设计效率的10条建议
http://www.woshipm.com/ucd/92153.html Axure 是创建软件原型的快速有力的工具.上手很容易,但是,其中存在一个危险.这款软件是如此的直观以至于很多用户可以在没有 ...
- 将“早期版本的Windows”改名
将“早期版本的Windows”改名,并修改系统等待时间 问题描述: 先装Windows XP,再装Windows 7,启动菜单会出现“早期版本的Windows”与“Windows 7”两个 ...
- 关于JSP---三大指令
JSP三大指令: page ------>最复杂的一个指令,属性很多,常用的像import,language,pageEncoding等等 include-------->静态包含, ...
- 【转】【MySql】MySql优化要点
如今随着互联网的发展,数据的量级也是撑指数的增长,从GB到TB到PB.对数据的各种操作也是愈加的困难,传统的关系性数据库已经无法满足快速查询与插入数据的需求.这个时候NoSQL的出现暂时解决了这一危机 ...