11.7 (下午)开课二个月零三天 (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 (下午)开课二个月零三天 (PDO)的更多相关文章
- 11.10 (下午)开课二个月零六天(ajax验证用户名,ajax调数据库)
用ajax验证用户名是否可用 testuid.php <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN&quo ...
- 11.11 开课二个月零七天(ajax和bootstrp做弹窗)
1.用ajax做弹窗显示信息详情 nation.php <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN&qu ...
- 11.10 (上午)开课二个月零六天(ajax基础,ajax做登录)
test.php <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://ww ...
- 11.8 开课二个月零四天 (Jquery取属性值,做全选,去空格)
1.jquery取复选框的值 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "htt ...
- 11.8 开课二个月零四天 (Jquery)
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- 2、JavaScript 基础二 (从零学习JavaScript)
11.强制转换 强制转换主要指使用Number.String和Boolean三个构造函数,手动将各种类型的值,转换成数字.字符串或者布尔值. 1>Number强制转换 参数为原始类型值的转换规 ...
- MyEclipse 2015免费在线公开课,2月5日开讲
MyEclipse 2015免费在线公开课,2月5日开讲,由MyEclipse官方高级PM Brian Fernandes 主讲. 主讲内容: 更好地支持javascript和技术模块 全新的REST ...
- 第21月第6天 zhihu如何用3个月零基础入门机器学习
1. 我们应该记住,既成的事实一定有它的道理,如果我们不能理解它,恐怕得从自身找原因.如果你交易股票,请记住,如果预测和市场不一致,错的是预测,而不是市场 https://www.cnblogs.co ...
- iOS 11开发教程(二十二)iOS11应用视图实现按钮的响应(2)
iOS 11开发教程(二十二)iOS11应用视图实现按钮的响应(2) 此时,当用户轻拍按钮后,一个叫tapButton()的方法就会被触发. 注意:以上这一种方式是动作声明和关联一起进行的,还有一种先 ...
随机推荐
- Reactjs-generator-cli 一款基于Ink构建用于快速搭建React应用的CLI scaffolding工具
Reactjs-generator-cli 一款基于Ink构建用于快速搭建React应用的CLI scaffolding工具 A simple CLI for scaffolding React.js ...
- windows无法访问linux服务器
解决: 或者有效 iptables -A INPUT -p tcp --dport 8000 -j ACCEPT[root@localhost ~]# iptables -A OUTPUT -p tc ...
- 记一款bug管理系统(bugdone.cn)的开发过程(1) -- 为什么要开发一款bug开发系统
对于从事软件研发行业的同学来说bug管理系统肯定不陌生.本人03年左右开始正式成为一名码农,工作期间接触过若干bug管理系统,如JIRA等,不过都是自行部署在公司内网的. 几年过去了,现在已经是互联网 ...
- Django开发笔记(一)
Django开发笔记(一) 标签(空格分隔): Django Python 1. 创建并运行Django项目 创建开发环境 安装Django pip install django==version 执 ...
- 总结获取原生JS(javascript)的父节点、子节点、兄弟节点
关于原生JS获取节点,一直是个头疼的问题,而且调用方法的名字又贼长了,所以我选择用JQ,好像跑题了-- 话不多说看代码 获取父节点 及 父节点下所有子节点(兄弟节点) <ul> <l ...
- 解决VS调试Web应用无问题而部署在IIS上报500和403的问题
[问题:报500]不能在此路径中使用此配置节.如果在父级别上锁定了该节,便会出现这种情况.锁定是默认设置的(overrideModeDefault="Deny" [解决方案] 运行 ...
- sql server复制表数据到另外一个表 的存储过程
) Drop Procedure GenerateData go CREATE PROCEDURE GenerateData @tablename sysname AS begin ) ) ) dec ...
- TexturePacker的plist切成单独小图片
工具原料 Python 2.7 安装环境 1.安装 Python 2.7 https://www.python.org/download/ 2.配置环境变量 Path :C:\Python27 pyt ...
- orcl 复杂查询
测试环境: create table bqh6 (xm varchar2(10),bmbh number(2),bmmc varchar2(15),gz int);insert into bqh6 v ...
- 使用Swoole 构建API接口服务
网上类似的文章已经很多了,我也是刚入门.从头开始学习.所以如果重复写文章阐释,反而会浪费时间,于是就自己动手构建了一个demo,使用swoole 的TCP 服务器接受TCP客户端的发来的http请求, ...