PDO的基本应用【访问不同的数据库】【事务功能】【防止SQL注入】

PDO

1.访问不同的数据库
2.自带事务功能
3.防止SQL注入

访问  自带的事务功能展示,

 1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 2 <html xmlns="http://www.w3.org/1999/xhtml">
 3 <head>
 4 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 5 <title>无标题文档</title>
 6 </head>
 7
 8 <body>
 9
10 <?php
11
12 /*//1.造对象
13 $dsn = "mysql:dbname=mydb;host=localhost";
14 $pdo = new PDO($dsn,"root","123");
15
16 //2.写SQL语句
17 $sql = "update nation set name=‘兽族‘ where code=‘n013‘";
18
19 //3.执行SQL语句
20 //$r = $pdo->query($sql);
21 $r = $pdo->exec($sql);*/
22
23 //事务功能
24 //造对象
25 $dsn = "mysql:dbname=mydb;host=localhost";
26 $pdo = new PDO($dsn,"root","123");
27
28 //设置异常模式
29 $pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
30
31
32 //写SQL语句
33 $sql1 = "insert into nation values(‘n016‘,‘人族‘)";
34 $sql2 = "insert into nation values(‘n017‘,‘不死族‘)";
35
36 //执行两条SQL语句
37 try
38 {
39     //启动事务
40     $pdo->beginTransaction();
41
42     $pdo->exec($sql1);
43     $pdo->exec($sql2);
44
45     //提交事务
46     $pdo->commit();
47 }
48 catch(PDOException $e)
49 {
50     //$e->getMessage();
51     //回滚
52     $pdo->rollBack();
53 }
60
61
62 ?>
63
64
65 </body>
66 </html>

下面的是防止sql注入    问号占位

<!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

//造对象
$dsn = "mysql:dbname=mydb;host=localhost";
$pdo = new PDO($dsn,"root","");

//写SQL语句,预处理语句
$sql = "insert into nation values(?,?)";

//准备SQL语句,返回statement对象
$st = $pdo->prepare($sql);

//绑定参数
/*$st->bindParam(1,$code);
$st->bindParam(2,$name);

$code="n022";
$name="矮人族";*/

$attr = array("n023","魔族");  //直接扔就可以了!

//提交执行,不用给SQL语句了,已经传过去了
var_dump($st->execute($attr));

//预处理语句里面用?占位的,给数组的时候要给索引数组
?>
</body>
</html>

另一种方法  名称占位

 1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 2 <html xmlns="http://www.w3.org/1999/xhtml">
 3 <head>
 4 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 5 <title>无标题文档</title>
 6 </head>
 7
 8 <body>
 9
10 <?php
11
12 //造对象
13 $dsn = "mysql:dbname=mydb;host=localhost";
14 $pdo = new PDO($dsn,"root","");
15
16 //写SQL语句,预处理语句,使用name占位
17 $sql = "insert into nation values(:code,:name)";  //注意用前面加冒号!!
18
19 //准备执行
20 $st = $pdo->prepare($sql);
21
22 //绑定参数
23 /*$st->bindParam(":code",$code,PDO::PARAM_STR);
24 $st->bindParam(":name",$name,PDO::PARAM_STR);
25
26 $code="n024";
27 $name="神族";*/
28
29 $attr = array("code"=>"n025","name"=>"虫族");
30
31 //执行
32 $st->execute($attr);    //注意执行方法
33
34
35
36 ?>
37 </body>
38 </html>

名称占位有点好处就是$_POST[""]提交的值就是处理页面要用的,省去重新赋的步骤

查询

<!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

//造对象
$dsn = "mysql:dbname=mydb;host=localhost";
$pdo = new PDO($dsn,"root","123");

//写SQL语句,预处理语句
$sql = "select * from nation";

//准备执行
$st = $pdo->prepare($sql);

//执行
$st->execute();

//读数据
var_dump($st->fetchAll(PDO::FETCH_ASSOC));   

?>
</body>
</html>
时间: 2024-11-11 11:52:28

PDO的基本应用【访问不同的数据库】【事务功能】【防止SQL注入】的相关文章

PDO(PHP Data Object),Mysqli,以及对sql注入等问题的解决

这篇是上一篇 http://www.cnblogs.com/charlesblc/p/5987951.html 的续集. 看有的文章提到mysqli和PDO都支持多重查询,所以下面的url会造成表数据被删. http://localhost:8080/test.php?id=3;delete%20from%20users 可是我在mysql版本的函数,上面的sql都不能执行.是不是不支持多重查询了? 这篇文章 http://www.runoob.com/php/php-mysql-connect

【数据库】软件安全测试之SQL注入

这些年我们发现越来越多的公司开始注重安全测试了,为什么?因为安全测试可以在某种程度上可以排查掉你项目的一些安全漏洞,这样你的系统上线后才会相对安全,才有可能尽量避免来自外部的攻击.每一年互联网都会发生一些重大的安全事件,而且每一次带来的后果也是很严重的,而这些教训恰恰都说明了安全测试的重要性. 那什么是安全测试呢?百度百科上给出来的解释是:安全测试是在IT软件产品的生命周期中,特别是产品开发基本完成到发布阶段,对产品进行检验以验证产品符合安全需求定义和产品质量标准的过程 .按照小编的理解,简单点

记录一下学习PDO技术防范SQL注入的方法

最近学习了使用PDO技术防范SQL注入的方法,在博客里当做一次笔记.若果有新的感悟在来添上一笔,毕竟也是刚开始学习.一. 什么是PDO PDO全名PHP Data Object PHP 数据对象 (PDO) 扩展为PHP访问数据库定义了一个轻量级的一致接口. PDO 提供了一个数据访问抽象层,这意味着,不管使用哪种数据库,都可以用相同的函数(方法)来查询和获取数据. 二.如何去使用PDO防范SQL注入?/防范sql注入这里使用quate()方法过滤特殊字符和通过预处理的一些方式以及bindPar

Oracle数据库SQL注入浅析与防护建议

作者:安华金和 思成 SQL注入是在信息安全领域一种常见的攻击手段.但是大部分人理解的SQL注入就是通过把SQL命令插入到Web表单提交或在输入域名.页面请求时加入的查询字符串,最终达到欺骗服务器执行偏离预期的SQL命令.这种情况下的SQL注入,引发原因基本是网页对用户输入的信息缺乏校验而导致. 很多人认为只有网页才可以进行 SQL 注入,才有注入点.这是一个普遍对SQL 注入的错误认识.SQL注入严格来讲应该叫做数据库SQL注入.SQL注入的最终目的是获取数据库中存储的敏感信息.事实上,任何可

06 数据库入门学习-视图、sql注入、事务、存储过程

一.视图 1.什么是视图 视图本质是一张虚拟的表 2.为什么要用 为了原表的安全 只要有两大功能 1.隐藏部分数据,开放指定数据 2.视图可以将查询结果保存,减少sql语句的次数 特点: 1.视图使用永久保存的,而且保存的仅仅是一条 as sql语句 2.每次对视图的查询,都是再次执行了保存的sql语句 3.对于视图的任何修改都会同步到原表 3.如何使用 语法: create view 视图名 as select * from 原表名; 验证:对视图的任何修改会改变原表  验证 二.sql注入

PDO访问方式操作数据库

mysqli是专门访问MySQL数据库的,不能访问其它数据库.PDO可以访问多种的数据库,它把操作类合并在一起,做成一个数据访问抽象层,这个抽象层就是PDO,根据类操作对应的数据库.mysqli是一个类,PDO也是一个类,只不过PDO这个类功能更加强大. PDO的功能1.访问不同的数据库2.自带事务功能.事务是指同时执行几条sql语句,但是其中1条语句出了错无法执行,那么所有的就都执行失败.3.防止SQL注入攻击. 1.访问不同数据库 下面代码是访问MySQL数据库的,如果访问其它数据库,只需要

PDO(数据访问抽象层)、pdo事务功能和预处理功能---2017-05-05

之前所学的数据访问都是用mysqli做成类来访问的,但是mysqli这个类只是针对mysql这个数据库的:那么如果访问其他类型的数据库呢? 那么这就用到了PDO(数据访问抽象层). 一.关于PDO基本语句(以MySQL数据库为例,因为电脑没有其他的数据库) (1)造PDO对象 $dsn = "mysql:dbname=mydb;host=localhost"; $pdo = new PDO($dsn,"root","123"); 格式: $dsn

MSSQL只能访问特定的数据库

让用户只能访问特定的数据库(MSSQL) 背景 客户的SQL Server实例上有多个厂商的数据库,每个数据库由各自的进行厂进行商维护, 为了限定不同厂商的维护人员只能访问自己的数据库,现需要给各个厂商限定权限,让他们登录SQL Server只能看到授权的数据库而无法看到其他数据库. 解决方案 1.先给不同的厂商创建不同的登录名(如下以一个厂商为例) 2.将登录名加入到public服务器角色中,然后点击确定 3.将待授权的数据库的dbowner指派给该用户 Use [xjcs] go EXEC

通过mysql-proxy映射外网访问内网数据库

配置教程: 转自:http://www.centoscn.com/mysql/2015/0107/4437.html centos安装mysql-proxy mysql-proxy的用处就不再说了 mysql-proxy依赖libevent,lua,glib2等几个软件 所以在安装之前先 yum install lua-devel yum install glib2-devel libevent我采用源代码安装, 下载的 libevent-1.4.13-stable.tar.gz tar zvf